PHP Imagick API - 将CLI命令转换为IMagick API

时间:2015-02-03 10:23:58

标签: php imagemagick imagick imagemagick-convert

我正在尝试将此方法中的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}");
}

对于上下文,此方法取自此nettuts教程,用于创建Instagram iamge过滤器: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方法(因为看起来colorizeImage本机IMagick方法有点破旧)

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代码给我的实际结果:

Original Image

Desired Result

And what I'm getting...

正如你所看到的,有些东西是真正的,真正的borked。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我已经使用了您的命令行版本并输入了我认为您的代码将创建它们的参数,以提供此命令:

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

结果如下:

enter image description here

版本:ImageMagick 6.9.0-3 Q16 x86_64 2015-01-15 http://www.imagemagick.org