Променете командния ред на imagemagick в php imagick

От съображения за производителност (изпълнението чрез php е просто невероятно бавно на моменти) конвертирам повечето от моите imagemagick команди в imagick на php.

Прочетох документацията за -channel и -level тук: http://www.imagemagick.org/script/command-line-options.php#channel и http://www.imagemagick.org/script/command-line-options.php#level

особено по отношение на стойностите на черно, бяло и гама:

Дадени са една, две или три стойности, разделени със запетаи: черна точка, бяла точка, гама (например: 10 250, 1,0 или 2%, 98%, 0,5). Черните и белите точки варират от 0 до QuantumRange или от 0 до 100%; ако бялата точка е пропусната, тя е настроена на (QuantumRange - black_point), така че да промени централния контраст. Ако навсякъде в низа присъства знак %, и черните, и белите точки са проценти от пълния цветови диапазон. Gamma ще направи -gamma корекция на стойностите. Ако е пропуснато, се приема стойността по подразбиране 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 и командния ред са много сходни:

оригинал
оригинал

комаден ред
команден ред

въведете описание на изображението тук
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 и модула ImageMagick на PHP:

$ 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