2017-08-25 5 views
0

J'ai une application qui utilise fréquemment le module PHP d'Imagick pour recolorer et compiler des images. J'ai récemment mis à niveau le logiciel du serveur de PHP 5.4 vers PHP 7.0 et j'ai ensuite mis à jour Imagick. Je cours maintenant ImageMagic 7.0.3 avec le module 3.4.3. J'ai vérifié ceci dans phpinfo de mon site() et avec la commande de serveur convert -version. La mise à jour pour les deux a été faite dans WHM de cPanel.Echec du canal alpha après la mise à jour d'Imagick

J'utilise la fonction suivante pour colorer une image en utilisant un hexagone donné tout en préservant sa forme alpha et cela fonctionne très bien jusqu'à la mise à jour.

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

Exemple de l'image avec succès recolored (pré-mise à jour): enter image description here

Exemple de la même entrée avec le comportement actuel (post-mise à jour): enter image description here

Je ne suis pas vraiment sûr qu'est-ce qui cause ce nouveau comportement. Il y a certainement de la couleur appliquée, mais elle n'est pas appliquée sous la forme de l'image fournie. De plus, tout ce qui a été recoloré après la couche de base (la première couche recolorée dans ce processus) ne semble pas du tout apparaître, les seules couches montrées ci-dessus étant celles qui ne sont pas recolorées.

Edit: Voici une des images d'entrée d'origine qui obtient Recolored:

https://i.stack.imgur.com/iyaoo.png - Couleur de base

https://i.stack.imgur.com/5W1nr.png - Contexte (Composites sous la base)

https://i.stack.imgur.com/LUmWd.png - Lineart (Composites sur la base)

Le procédé composite a été ajouté ci-dessous. D'abord la fonction recolore tous les objets de calque applicables, puis les compose et les masque à l'image "couleur" (la couche de "base" affichée ci-dessus en forme de loup). Ensuite, cette image est composée sur le fond et les lignes et le logo ajoutés sur le dessus pour créer l'image finale.

$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);` 
+0

Déposez votre image d'entrée, afin que nous puissions tester avec elle. IM 7.0.3.x est plutôt vieux et peut avoir des bugs. Pouvez-vous passer à IM 7.0.6.9, la version actuelle? Aussi, quelle est votre version mineure exacte - le x de mon IM 7.0.3.x? – fmw42

+0

@ fmw42 Merci pour votre commentaire! J'ai ajouté l'image de base d'origine à l'article d'origine. J'espère que c'est ce que tu voulais dire. Ma version exacte est 'ImageMagick 7.0.3-0 Q16 x86_64 2016-09-16' –

+0

S'il vous plaît poster votre image de fond. Si je comprends bien, vous utilisez le canal alpha pour faire une forme -alpha et peut-être le compositing sur une image de fond. Est-ce exact?Si non, dites-moi fonctionnellement ce que vous faites et fournissez toutes les images d'entrée. De cette façon, je peux utiliser IM 7.0.3.0 et tester dans la ligne de commande et comparer à IM 7.0.6.9, la version actuelle pour voir si c'était un bug qui a été corrigé ou encore un problème. – fmw42

Répondre

2

Imagemagick 7.0.3.0 a un bug et je peux reproduire votre problème dans la ligne de commande.

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

Mais il fonctionne très bien dans ImageMagick 7.0.6.9 courant dans la ligne de commande.

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

Je vous suggère de mettre à jour votre version de Imagemagick