Что эквивалентно Imagick следующей команде Imagemagick?

Что такое эквивалент Imagick следующей команды Imagemagick?

convert i.jpg -set colorspace RGB ( -clone 0 -fill black -colorize 100% ) ( -clone 0 colorspace gray -negate ) -compose blend -define compose:args=70,30 -composite o.jpg

Я выполнил следующие команды Imagick, но это не похоже на то же самое.

$img = new Imagick("i.jpg");
$img->setImageColorspace(Imagick::COLORSPACE_RGB);
$clone1 = $img->clone();
$clone1->colorizeImage('black', 1.0);
$clone2 = $img->clone();
$clone2->setImageColorspace(Imagick::COLORSPACE_GRAY);
$clone2->negateImage(0);
$img->setOption('compose:args', '70x30');
$img->compositeImage($clone1, Imagick::COMPOSITE_BLEND, 0, 0);
$img->compositeImage($clone2, Imagick::COMPOSITE_BLEND, 0, 0);
$img->writeImage("o.jpg");

Где я допустил ошибки?


person user1545997    schedule 20.01.2014    source источник


Ответы (1)


По большей части то, что у вас есть, правильно. Чтобы соответствовать результату CLI, необходимо решить две незначительные проблемы.

Первый

Переместите строку setOption перед чтением любых изображений в объекте Imagick.

$img = new Imagick();
$img->setOption('compose:args', '70x30');
$img->readImage("i.jpg");
// ...

Второй

Раскрашивание черного цвета до 100% обычно приводит к сплошному черному изображению. По какой-то причине метод MagickColorizeImage не работает. В комментариях к ImagickDraw и присвоения цвета фона. ">документация. Я бы порекомендовал вернуться к вашему первому $clone1 изображению.

person emcconville    schedule 20.01.2014
comment
Спасибо за помощь! Почему нам нужно выполнить setOption перед чтением изображения? - person user1545997; 21.01.2014
comment
Я предполагаю, что это поведение может быть связано с архитектурой копирования в памяти PHP, в отличие от традиционных указателей, ссылок и распределений, которые вы ожидаете в стандартной библиотеке ImageMagick (или любой другой). В конце концов, это небольшая загвоздка, которая существует в пользовательском пространстве, а не в библиотеке или API. - person emcconville; 21.01.2014
comment
Ok. Спасибо! У меня есть еще один вопрос, связанный с imagick, в stackoverflow. com/questions/21248421/ Не могли бы вы ответить и на это тоже? - person user1545997; 21.01.2014
comment
@emcconville, не могли бы вы проверить этот вопрос? stackoverflow.com/questions/62777570/ - person Keyur Shah; 21.07.2020