PHP Imagick的fxImage根本不起作用

时间:2014-05-14 15:17:11

标签: php imagemagick imagick imagemagick-convert

我有一个简单的转换< imagemagicks命令行,我想用PHP的Imagick类来模仿:

convert \( "image1.jpg" \) \
        \( -size 1x256 gradient:white-black \
           -rotate 90 \
           -fx "floor(u*10+0.5)/10" \
        \) \
        "temp1.jpg"`

该行输出2张图片:temp1-0.jpg这只是image1.jpgtemp1-1.jpg的副本,就是这一张:temp1 正如您所看到的那样,它是一个简单的渐变图像,其效果使得渐变不那么平滑。这与命令行imagemagick完美配合。

虽然当我尝试使用PHP模仿该行时,它确实一切正确,但-fx部分。代码如下:

$canvas = new Imagick();
$canvas->newImage(1, 256, "white", "jpg");

$gradient = new Imagick();
$gradient->newPseudoImage(1, 256, "gradient:white-black");
$canvas->compositeImage( $gradient, imagick::COMPOSITE_OVER, 0, 0 );
$canvas->rotateImage(new ImagickPixel(), 90);
$canvas->fxImage("floor(s*10+0.5)/10");

header( "Content-Type: image/jpg" );
echo $canvas;

就像我说的那样,它不会重现fx部分,而是正常的白色到黑色渐变。

我是Imagemagick的新手,但我尝试使用该功能u+10应用更简单的效果,但仍然无法看到效果。 我错过了让fxImage()正常工作的内容吗? 是否有类似效果的解决方法?

1 个答案:

答案 0 :(得分:0)

看起来它是Imagick库中的一个错误 - 图像实际上是可用的,但是作为函数的返回值。

$canvas = new Imagick();
$canvas->newImage(1, 256, "white", "jpg");

$gradient = new Imagick();
$gradient->newPseudoImage(1, 256, "gradient:white-black");
$canvas->compositeImage( $gradient, imagick::COMPOSITE_OVER, 0, 0 );
$canvas->rotateImage(new ImagickPixel(), 90);
$fxImage = $canvas->fxImage("floor(s*10+0.5)/10");

$fxImage->setImageFormat('jpg');
header( "Content-Type: image/jpg" );
echo $fxImage;

使用步进渐变生成图像。

我在Imagick github页面上为此打开了一个问题。