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):
Beispiel für den gleichen Eingang mit Stromverhalten (post-update):
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);`
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
@ 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' –
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