imagemagick — PHP Imagick API — Перевести команду CLI в IMagick API

Я пытаюсь изменить команды imagemagick exec в этом методе на команды IMagick php:

 public function colortone($input, $color, $level, $type = 0)
{
$args[0] = $level;
$args[1] = 100 - $level;
$negate = $type == 0? '-negate': '';

$this->execute("convert
{$input}
( -clone 0 -fill '$color' -colorize 100% )
( -clone 0 -colorspace gray $negate )
-compose blend -define compose:args=$args[0],$args[1] -composite
{$input}");
}

Для контекста, этот метод взят из этого руководства по созданию фильтров Instagram: http://code.tutsplus.com/tutorials/create-instagram-filters-with-php—net-24504

Я уже целый день бьюсь головой о кирпичную стену, просто не могу заставить ее работать. Я плохо разбираюсь в том, как работает манипулирование изображениями, и это может быть моей ошибкой, так как я не совсем понимаю, что делается в первую очередь, чтобы иметь возможность перенести его в PHP.

Это то, что я придумал …

public function colortone( $color, $level, $type = 0){
$args[0] = $level;
$args[1] = 100 - $level;
$this->_image = new Imagick();
$this->_image->setOption( 'compose:args', $args[0] . 'x' . $args[1] );
$this->_image->readImage( $image_loc );$negate = $type == 0 ? TRUE : FALSE;

$this->_image->setImageColorspace ( Imagick::COLORSPACE_RGB );
$_image_clone_1 = clone $this->_image;
$_image_clone_1 = $this->colorizeIt( $_image_clone_1, $color, 1.0 );

$_image_clone_2 = clone $this->_image;
$_image_clone_2->setImageColorspace( Imagick::COLORSPACE_GRAY );
if( $negate )
$_image_clone_2->negateImage( 0 );

$this->_image->compositeImage( $_image_clone_1, Imagick::COMPOSITE_BLEND, 0, 0 );
$this->_image->compositeImage( $_image_clone_2, Imagick::COMPOSITE_BLEND, 0, 0 );
}

Вот метод colorizeIt, использованный выше (так как кажется, что собственный метод IMagick colorizeImage немного обанкротился)

public function colorizeIt( $image_obj, $color, $alpha = 1 ){
$draw = new ImagickDraw();
$draw->setFillColor($color);

if (is_float($alpha))
$draw->setFillAlpha($alpha);

$geometry = $image_obj->getImageGeometry();
$width = $geometry['width'];
$height = $geometry['height'];

$draw->rectangle(0, 0, $width, $height);

$image_obj->drawImage($draw);
return $image_obj;
}

Вот исходное изображение, за которым следуют желаемый результат и фактический результат, который дает мне мой PHP-код:

Исходное изображение

Желаемый результат

И что я'm getting...

Как видите, что-то хорошо и по-настоящему обмануто. Любая помощь высоко ценится!

0

Решение

Я взял вашу версию командной строки и ввел параметры, так как я верю, что ваш код создаст их, чтобы дать эту команду:

convert http://i.stack.imgur.com/vqWqd.jpg         \
\( -clone 0 -fill "#330000" -colorize 100% \)  \
\( -clone 0 -colorspace gray -negate \)        \
-compose blend -define compose:args=100x0 -composite output.jpg

и результат таков:

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

Версия: ImageMagick 6.9.0-3 Q16 x86_64 2015-01-15 http://www.imagemagick.org

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]