Измените командную строку imagemagick на php imagick

По соображениям производительности (exec in via php временами просто невероятно медленный) я конвертирую большинство моих команд imagemagick в imicks php.

Я прочитал документацию по -channel и -level здесь: http://www.imagemagick.org/script/command-line-options.php#channel и http://www.imagemagick.org/script/command-line-options.php#level

особенно в отношении значений черного, белого и гаммы:

Дано одно, два или три значения, разделенных запятыми: точка черного, точка белого, гамма (например: 10250,1,0 или 2%, 98%, 0,5). Диапазон черных и белых точек составляет от 0 до QuantumRange или от 0 до 100%; если белая точка опущена, она устанавливается в (QuantumRange - black_point), чтобы центральный контраст изменился. Если где-либо в строке присутствует знак%, черные и белые точки являются процентами от полного цветового диапазона. Гамма выполнит корректировку значений гаммы. Если он не указан, используется значение по умолчанию 1.0 (без гамма-коррекции).

При нормальном использовании (-уровень) значения изображения растягиваются так, что заданное значение «black_point» в исходном изображении устанавливается равным нулю (или черным), в то время как заданное значение «white_point» устанавливается на QuantumRange (или белый). Это обеспечивает прямую регулировку контрастности изображения. Затем «гамма» полученного изображения будет скорректирована.

На основании этого я попытался изменить

convert a.jpg -channel R -level 33% -channel G -level 33% b.jpg

to

$quantumRange = $image->getQuantumRange();
//get the 33%
$blackPoint = $quantumRange ['quantumRangeLong']/100*33;
//to get the middle ground between black and white - also tried with $quantumRange['quantumRangeLong']
$whitePoint = $quantumRange ['quantumRangeLong'] - $blackPoint;
$gamma = 1;

$image->levelImage ( $blackPoint , $gamma , $whitePoint , Imagick::CHANNEL_RED);
$image->levelImage ( $blackPoint , $gamma , $whitePoint , Imagick::CHANNEL_GREEN);

но результат выглядит совсем по-другому ... есть ли эксперты, которые могут указать, как imagick выполняет свои уровни каналов?


person rita    schedule 18.01.2013    source источник


Ответы (1)


Я попробовал это на своем компьютере, и версии PHP и командной строки очень похожи:

original
оригинал

командная строка
командная строка

введите описание изображения здесь
PHP

Я не вижу ничего плохого в вашем сценарии, но вы можете попробовать мой, чтобы увидеть, работает ли он по-другому.

$image = new Imagick();
$quantum_range = $image->getQuantumRange();
$max_quantum = $quantum_range["quantumRangeLong"];
$image->readImage("rose.jpg");
$black_point = $max_quantum * .33;
$white_point = $max_quantum - $black_point;
$gamma = 1.0;
$image->levelImage($black_point, $gamma, $white_point, Imagick::CHANNEL_RED);
$image->levelImage($black_point, $gamma, $white_point, Imagick::CHANNEL_GREEN);
header("Content-type: image/jpeg");
echo $image;
$image->writeImage("php.jpg");

Если он все еще не работает, вот мои версии ImageMagick и модуля PHP ImageMagick:

$ convert -version
Version: ImageMagick 6.7.9-10 2012-10-10 Q16 http://www.imagemagick.org
Array ( [versionNumber] => 1632
        [versionString] => ImageMagick 6.6.0-4 2012-05-03 Q16
                           http://www.imagemagick.org )
person 0eggxactly    schedule 20.01.2013
comment
хорошо, я понятия не имею, что там пошло не так, но, похоже, теперь это работает ... сводило меня с ума! Спасибо за проверку! - person rita; 21.01.2013