【发布时间】:2020-04-20 14:04:20
【问题描述】:
我在 Windows 8.1 上使用 ImageMagick 7.0.8-66 Q16 x64 我的 PHP 在 XAMPP 上是 7.4.1。
我已经在 PHP 中使用 exec() 成功运行了以下命令:
convert _temp_.jpg
( +clone -background black -shadow 88x3+2+2 )
+swap -background none -layers merge
+repage -background #eeeeee -layers flatten
+repage -shave 3x3
( -size 100x100 xc:#eeeeee )
+swap -gravity northwest -geometry +5+5 -compose over -composite output.jpg
它需要一张图片,调整它的大小以适应 100x100 的缩略图,然后在中性的 #eeeeee 背景画布上为图片添加阴影。它有效。
我想重写它以使用 Imagick PHP 扩展,但我在翻译它时遇到了麻烦。这是我翻译它的方式(带有注释),但它不起作用:
// convert _temp_.jpg
$im = new imagick();
$im->readImage('_temp_.jpg');
// ( +clone -background black -shadow 88x3+2+2 )
$im_clone = clone $im;
$im_clone->setImageBackgroundColor('black');
$im_clone->shadowImage(88, 3, 2, 2);
// +swap -background none -layers merge
$im->setImageBackgroundColor('none');
$im->addImage($im_clone);
$im->mergeImageLayers(imagick::LAYERMETHOD_MERGE);
// +repage -background #eeeeee -layers flatten
$im->cropImage(88, 88, +5, +5);
$im->setImagePage(88, 88, 0, 0);
$im->setImageBackgroundColor('#eeeeee');
$im->mergeImageLayers(imagick::LAYERMETHOD_FLATTEN);
// +repage -shave 3x3
$im->cropImage(88, 88, +5, +5);
$im->setImagePage(88, 88, 0, 0);
$im->shaveImage(3, 3);
// ( -size 100x100 xc:#eeeeee )
$im_pseudo = new Imagick();
$im_pseudo->newPseudoImage(100, 100, 'xc:#eeeeee');
// +swap -gravity northwest -geometry +5+5 -compose over -composite output.jpg
$im->setImageGravity(imagick::GRAVITY_NORTHWEST);
$im->compositeImage($im_pseudo, Imagick::COMPOSITE_OVER, 5, 5);
$im->writeImage('output.jpg');
我错过了什么?
【问题讨论】:
-
什么不起作用?在我进入下一步之前,我会完成每一步并让它发挥作用。我会尝试更改的一件事是将“”更改为“”
-
我已经做到了。当我只处理与“convert temp.jpg ( +clone -background black -shadow 88x3+2+2 ) +swap -background none -layers merge ”对应的部分时,结果不一样.此外,使用单引号和双引号没有区别。
-
你应该附上你的输入图像和预期的输出图像以及你得到的结果。
-
完成。见上文。
-
也许您可以添加它的外观。
标签: php image-processing xampp imagemagick imagick