我有一個經常使用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