Während der PHP -Bildverarbeitung ist die ImageFlip () -Funktion eine sehr bequeme Funktion, um Bilder horizontal, vertikal oder beides umzudrehen. In der tatsächlichen Verwendung werden Entwickler jedoch auf ein gemeinsames Problem stoßen:.
Dieser Artikel wird in die Ursache dieses Problems eingehen und eine Lösung bereitstellen, mit der Sie den Flip transparenter PNG -Bilder korrekt verarbeiten können.
Schauen wir uns einen einfachen Beispielcode an:
<?php
$img = imagecreatefrompng('https://m66.net/images/sample.png');
imageflip($img, IMG_FLIP_HORIZONTAL);
imagepng($img, 'flipped.png');
imagedestroy($img);
?>
Die Absicht dieses Codes ist es, ein PNG -Bild horizontal umzudrehen und zu speichern. Der gespeicherte Fliped.png führt jedoch dazu, dass das Problem der transparenten Fläche dunkler wird.
Die Wurzel des Problems ist, dass ImageFlip () selbst nicht die Aufbewahrung von Alpha -Kanälen (Transparenz) verarbeitet. Dies ist besonders deutlich, wenn ImageFlip () Alpha -Speichern für Bilder nicht ermöglicht, bevor Sie ImageFlip () verwenden.
Speziell:
PNG -Bilder können Alpha -Kanäle (Transparenzinformationen) enthalten.
Wenn die Unterstützung der Alpha -Kanal nicht aktiviert ist und die Alpha -Mischung vor der Verwendung von ImageFlip () deaktiviert ist, füllt die GD -Bibliothek den transparenten Bereich automatisch mit der Standard -Hintergrundfarbe (normalerweise schwarz), wenn sie verarbeitet werden.
ImageFlip () kopiert nur Pixeldaten und verarbeitet die Alpha -Informationen nicht automatisch.
Um dieses Problem zu lösen, müssen wir die Alpha -Kanal -Verarbeitungsmethode der GD -Bibliothek vor und nach dem Bild eindeutig festlegen. Es gibt zwei wichtige Punkte:
ImagesAvealpha () : Ermöglicht das Speichern der Unterstützung für den Alpha -Kanal.
birealPhableending () : Schalten Sie den Alpha -Mischmodus aus, um eine Synthese zu vermeiden, die die Transparenz beeinflusst.
Hier ist ein geänderter korrekter Codebeispiel:
<?php
$img = imagecreatefrompng('https://m66.net/images/sample.png');
// Schalten Sie den Mischmodus aus,reservieren alpha Gang
imagealphablending($img, false);
imagesavealpha($img, true);
// Führen Sie einen Flip -Operation durch
imageflip($img, IMG_FLIP_HORIZONTAL);
// Speichern Sie als neues Bild
imagepng($img, 'flipped.png');
imagedestroy($img);
?>
Auf diese Weise kann das verarbeitete Bild den ursprünglichen transparenten Effekt beibehalten und nicht mehr dazu führen, dass der transparente Bereich schwarz wird.
Wenn Sie Bilder generieren oder eine komplexere Bildverarbeitung durchführen (wie Synthese, Rotation, Skalierung), wird dieselbe empfohlen:
Verwenden Sie ImageCrreatTueColor () , wenn Sie Bilder erstellen und transparent Hintergrund manuell festlegen.
Füllen Sie manuell transparente Farben für neue Bilder;
Setzen Sie Immer ImagesAvealpha ($ img, true); Vor dem Speichern.
Zum Beispiel:
$newImg = imagecreatetruecolor($width, $height);
imagesavealpha($newImg, true);
imagealphablending($newImg, false);
$transparent = imagecolorallocatealpha($newImg, 0, 0, 0, 127);
imagefill($newImg, 0, 0, $transparent);
Der Verlust der Transparenz bei der Verwendung von ImageFlip () zur Verarbeitung transparenter PNG -Bilder ist auf die falsche Einstellung der GD -Bibliothek mit dem Alpha -Kanal zurückzuführen. Schalten Sie einfach den Mischmodus aus und aktivieren Sie Alpha Save vor dem Bildbetrieb, um die transparenten Effekte von PNG perfekt beizubehalten.
Das korrekte Verständnis und die Handhabung des Alpha -Mechanismus von GD kann dieses Problem nicht nur lösen, sondern auch beim Schreiben von robusteren Code im Bereich der PHP -Bildverarbeitung.