我有一个简单的转换< 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.jpg
和temp1-1.jpg
的副本,就是这一张:
正如您所看到的那样,它是一个简单的渐变图像,其效果使得渐变不那么平滑。这与命令行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()
正常工作的内容吗?
是否有类似效果的解决方法?
答案 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页面上为此打开了一个问题。