我有一个经常使用Imagick的PHP模块重新着色和合成图像的应用程序。我最近将服务器的软件从PHP 5.4升级到了PHP 7.0,随后升级了Imagick。我现在使用模块3.4.3运行ImageMagic 7.0.3。我在我的网站的phpinfo()和服务器命令convert -version
中验证了这一点。两者的更新都是在cPanel的WHM中完成的。Imagick更新后Alpha通道失败
我使用以下函数使用给定的十六进制对图像进行着色,同时保留它的alpha形状,并且它的工作情况很好,直到更新。图像的
protected function recolor($obj, $hex)
{
$obj->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$obj->setImageBackgroundColor('#' . str_replace('#', '', $hex));
$obj->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
return $obj;
}
我真的不知道什么导致了这种新行为。确实有颜色被应用,但它没有被应用在提供的图像的形状中。另外,在基础层(在此过程中重新着色的第一层)之后重新着色的所有内容似乎都没有显示出来,只有上面显示的层不会被重新着色。
编辑:下面是获取重新着色原始输入图像中的一个:
https://i.stack.imgur.com/iyaoo.png - 基本颜色
https://i.stack.imgur.com/5W1nr.png - 背景(下基复合材料)
https://i.stack.imgur.com/LUmWd.png - 线条稿(超过基复合材料)
复合工艺已在下面添加。首先,函数会重新着色所有适用的图层对象,然后将它们合成并将它们掩盖到“颜色”图像(上面以狼的形状张贴的“基本”图层)。然后将该图像合成到背景上,并在顶部添加线条和徽标以创建最终图像。
$this->recolor($this->color, $baseHex);
$this->recolor($this->eyes, $eyesHex);
$this->recolor($this->eyebrows, $eyebrowsHex);
$this->recolor($this->pads, $padsHex);
$this->recolor($this->nose, $noseHex);
$this->recolor($this->claws, $clawsHex);
$this->recolor($this->tongue, $tongueHex);
$this->image->newImage(800, 598, new \ImagickPixel('transparent'));
$this->image->compositeImage($this->color, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->compositeMarkings();
$this->image->compositeImage($this->eyes, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->image->compositeImage($this->eyebrows, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->image->compositeImage($this->pads, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->image->compositeImage($this->nose, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->image->compositeImage($this->claws, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->image->compositeImage($this->tongue, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->mask($this->image, $this->color);
$this->bg->compositeImage($this->image, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->bg->compositeImage($this->lines, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->bg->compositeImage($this->logo, Imagick::COMPOSITE_DEFAULT, 0, 0);
$this->bg->setImageColorSpace(Imagick::COLORSPACE_SRGB);`
安置自己的输入图像的版本,所以我们可以用它测试。 IM 7.0.3.x比较老,可能会有错误。你能升级到IM 7.0.6.9,目前的版本吗?另外,你的确切次要版本 - 我的IM 7.0.3.x中的x是什么? – fmw42
@ fmw42感谢您的评论!我已将原始基本图像添加到原始帖子。我希望这就是你的意思。我的确切版本是'ImageMagick 7.0.3-0 Q16 x86_64 2016-09-16' –
请发布您的背景图片。如果我明白你正在使用Alpha通道做一个-alpha形状,然后可能合成一些背景图像。那是对的吗?如果不是,请在功能上告诉我你在做什么,并提供所有的输入图像。这样我可以使用IM 7.0.3.0并在命令行中进行测试,并与IM 7.0.6.9(当前版本)进行比较,以查看它是否是一个已修复或仍然存在问题的错误。 – fmw42