【问题标题】:PHP Imagick's fxImage not working at allPHP Imagick 的 fxImage 根本不工作
【发布时间】:2014-07-02 17:59:32
【问题描述】:

我有一个简单的 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.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() 正常工作的东西? 有这样的效果的解决方法吗?

【问题讨论】:

  • 我没有使用 imagick 的那个特定功能,但我想指出,如果你真的无法通过 PHP imagick 扩展找到任何方法,你可以调用命令行版本你在 PHP 中提出,使用 exec。 us3.php.net/function.exec
  • 哦,忘了说我正在使用不允许 exec() 的转售服务器,因此是 Imagick 类。

标签: php imagemagick imagick imagemagick-convert


【解决方案1】:

看起来这是 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 页面上为此打开了一个问题。

【讨论】:

  • 我记得在一个旧的 PHP bugtrack 页面上读到了关于 fxImage() 的行为,幸运的是当时我有一个替代方案来重现这种效果。无论如何,这就是 fxImage 的工作方式,我接受它作为答案(因为我现在正在以这种方式使用它)。关于您的示例的一件事:您应该回显$fxImage(或在$canvas 上编写$fxImage)以正确显示它。谢谢。
猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 2021-05-01
  • 2014-06-10
  • 2018-05-23
  • 2013-03-26
  • 2014-02-03
  • 2016-10-29
  • 2018-02-10
相关资源
最近更新 更多