Imagick更新后Alpha通道失败

时间:2017-08-25 22:47:54

标签: php imagemagick imagick

我有一个应用程序经常使用Imagick的PHP模块来重新着色和合成图像。我最近将服务器软件从PHP 5.4升级到PHP 7.0,然后升级了Imagick。我现在使用模块3.4.3运行ImageMagic 7.0.3。我已在我的网站的phpinfo()和服务器命令foreach (var a in doc.DocumentNode.Descendants("a") .Where(a => a.Attributes["href"] != null)) 中验证了这一点。两者的更新都是在cPanel的WHM中完成的。

我使用以下函数使用给定的十六进制为图像着色,同时保留它的alpha形状,并且在更新之前一直工作正常。

convert -version

图像成功重新着色(更新前)的示例: enter image description here

具有当前行为的相同输入示例(更新后): enter image description here

我不确定是什么导致了这种新行为。肯定会应用颜色,但它并未以所提供图像的形状应用。此外,在基础层(在此过程中重新着色的第一层)之后重新着色的所有内容似乎都没有显示出来,上面显示的唯一层是不会重新着色的层。

编辑:这是一个重新着色的原始输入图像:

https://i.stack.imgur.com/iyaoo.png - 基色

https://i.stack.imgur.com/5W1nr.png - 背景(基础下的复合材料)

https://i.stack.imgur.com/LUmWd.png - Lineart(基础复合材料)

下面添加了复合过程。首先,该函数重新处理所有适用的图层对象,然后将它们合成并将它们屏蔽为“颜色”图像(上面以狼的形状张贴的“基础”图层)。然后将该图像合成到背景上,并在顶部添加线条和徽标以创建最终图像。

protected function recolor($obj, $hex)
{
    $obj->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
    $obj->setImageBackgroundColor('#' . str_replace('#', '', $hex));
    $obj->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
    return $obj;
}

1 个答案:

答案 0 :(得分:2)

Imagemagick 7.0.3.0有一个错误,我可以在命令行中重现您的问题。

magick 5W1nr.png \( iyaoo.png -alpha extract -background "#988777" -alpha shape \) -compose over -composite LUmWd.png  -compose over -composite result7030.png

enter image description here

但它在命令行中的当前Imagemagick 7.0.6.9中工作正常。

magick 5W1nr.png \( iyaoo.png -alpha extract -background "#988777" -alpha shape \) -compose over -composite LUmWd.png  -compose over -composite result7069.png

enter image description here

所以我建议你升级你的Imagemagick版本