2017-08-25 4 views
0

Ich habe eine Anwendung, die oft Imagick-PHP-Modul zum Neu einfärben und zusammengesetzte Bilder verwendet. Ich habe kürzlich die Software des Servers von PHP 5.4 auf PHP 7.0 aktualisiert und anschließend auch Imagick aktualisiert. Ich führe jetzt ImageMagic 7.0.3 mit dem Modul 3.4.3. Ich habe dies in meiner Website phpinfo() und mit dem Server-Befehl convert -version verifiziert. Das Update für beide wurde in WHM von cPanel durchgeführt.Alpha-Kanal fehlgeschlagen nach Imagick-Update

Ich benutze die folgende Funktion, um ein Bild mit einem gegebenen Sechseck zu färben, während es seine Alpha-Form beibehält und es bis zur Aktualisierung gut funktioniert.

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

Beispiel für das Bild erfolgreich neugeeinfärbt (pre-update): enter image description here

Beispiel für den gleichen Eingang mit Stromverhalten (post-update): enter image description here

Ich bin nicht wirklich sicher was verursacht dieses neue Verhalten. Es wird definitiv Farbe angewendet, aber es wird nicht in der Form des gelieferten Bildes angewendet. Außerdem scheint alles, was nach dem Basis-Layer (dem ersten Layer, der in diesem Prozess neu eingefärbt wird) neu eingefärbt wurde, überhaupt nicht angezeigt zu werden, wobei die einzigen oben gezeigten Layer nicht eingefärbte Layer sind.

Edit: Hier ist eine der ursprünglichen Eingangsbilder, die neugeeinfärbt wird:

https://i.stack.imgur.com/iyaoo.png - Grundfarbe

https://i.stack.imgur.com/5W1nr.png - Hintergrund (Composites unter Basis)

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

Der Verbundprozess wurde unten hinzugefügt. Zuerst werden alle zutreffenden Layer-Objekte neu eingefärbt und dann zusammengefügt und zum "Color" -Bild hin maskiert (der "Base" -Layer, der oben in Form des Wolfs steht). Dann wird dieses Bild auf den Hintergrund zusammengesetzt und die Linien und das Logo oben hinzugefügt, um das endgültige Bild zu erstellen.

$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

Post Eingangsbild aktualisieren, so dass wir mit ihm testen. IM 7.0.3.x ist ziemlich alt und könnte Bugs enthalten. Können Sie auf IM 7.0.6.9, die aktuelle Version, upgraden? Auch, was ist Ihre genaue Nebenversion - das x in meiner IM 7.0.3.x? – fmw42

+0

@ fmw42 Vielen Dank für Ihren Kommentar! Ich habe das ursprüngliche Basisbild dem ursprünglichen Beitrag hinzugefügt. Ich hoffe, das hast du gemeint. Meine genaue Version ist 'ImageMagick 7.0.3-0 Q16 x86_64 2016-09-16' –

+0

Bitte posten Sie Ihr Hintergrundbild. Wenn ich verstehe, dass Sie den Alpha-Kanal verwenden, um eine Alpha-Form zu erstellen und dann vielleicht über ein Hintergrundbild zu komponieren. Ist das korrekt?Wenn nicht, sag mir bitte funktionell, was du machst, und stelle alle Eingabebilder bereit. Auf diese Weise kann ich IM 7.0.3.0 verwenden und in der Befehlszeile testen und mit IM 7.0.6.9 vergleichen, die aktuelle Version, um zu sehen, ob es sich um einen Fehler handelt, der behoben wurde oder immer noch ein Problem ist. – fmw42

Antwort

2

Imagemag 7.0.3.0 hat einen Fehler und ich kann Ihr Problem in der Befehlszeile reproduzieren.

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

Aber es funktioniert in der aktuellen Imagemagick 7.0.6.9 in der Befehlszeile in Ordnung.

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

Deshalb schlage ich vor Sie Ihre Version von ImageMagick

Verwandte Themen