Aktueller Standort: Startseite> Neueste Artikel> Das Bildsparenformat ist nach dem transparenten Einstellen falsch (z. B. die Verwendung von JPEG)

Das Bildsparenformat ist nach dem transparenten Einstellen falsch (z. B. die Verwendung von JPEG)

M66 2025-06-04

In PHP ist ImageColorallocatealpha () eine sehr nützliche Funktion, die Bildern mit Transparenz (Alpha -Kanäle) Farben zuweist. Die Definition dieser Funktion lautet wie folgt:

 int imagecolorallocatealpha ( GdImage $image , int $red , int $green , int $blue , int $alpha )

Dabei beträgt der Wertebereich des $ alpha -Parameters 0 (vollständig undurchsichtig) bis 127 (vollständig transparent).

Viele Entwickler möchten transparente Effekte verwenden, wenn sie die GD -Bibliothek von PHP verwenden, um Bilder zu verarbeiten, z. B. Wasserzeichen oder durchscheinende Stapel. Sie verwenden also ImageColorallocatealpha () , um transparente Farben zuzuweisen und dann die Datei mit ImagePng () , ImageGif () oder imageJpeg () zu speichern. Wenn sie es jedoch im JPEG -Format speichern, stellen sie häufig fest, dass der Transparenzeffekt vollständig verschwindet und sogar Bildkorruption oder Farbanomalien auftreten.

Warum passiert das?

1 ?? Das JPEG -Format selbst unterstützt keine Transparenz

Dies ist das zentralste Problem. JPEG (oder JPG) ist ein verlustkomprimiertes Bildformat, das speziell für fotoähnliche Bilder entwickelt wurde, und es unterstützt überhaupt keine Alpha-Kanäle oder -transparenz.

Wenn Sie ein Bild mit transparenten Pixeln im Speicher erstellen (z. B. die Verwendung von ImageColorAllocatealpha (), um Farben zuzuweisen) und dann ImageJpeg () aufzurufen, um es zu speichern, muss die GD -Bibliothek die Transparenzinformationen verwerfen, da es keinen Platz gibt, um den Alpha -Kanal in der JPEG -Dateispezifikation zu speichern.

Dies führt zu:

  • Transparente Bereiche sind normalerweise mit Schwarz oder Weiß gefüllt (abhängig von der Implementierung);

  • Wenn die von Ihnen verwendete Farbe Alpha hat, kann sie während des Speichers falsch interpretiert werden, was zu einem abnormalen Farbwert führt.

  • Einige Image -Betrachter oder Bibliotheken können Ausnahmen anzeigen, wenn diese "transparenten Daten gemischt in" JPEG -Dateien gelesen werden.

2 ?? Es sollte ein Format sein, das Transparenz unterstützt

Wenn Ihr Ziel darin besteht, Bilder durch Transparenz zu speichern, sollten Sie das PNG- oder GIF -Format verwenden:

  • PNG unterstützt echte Alpha-Kanäle und kann hochwertige, vollständig transparente oder halbtransparente Bilder sparen.

  • GIF unterstützt nur die Monochromtransparenz (kein durchscheinendes), ist aber auch für einfache Transparenz ausreichend.

In PHP kann das Ersetzen von Image JPEG () durch ImagePng () oder ImageGif () Bilder mit Transparenz korrekt speichern. Zum Beispiel:

 <?php
$img = imagecreatetruecolor(200, 200);

// Aktivieren alpha Kanalsparen
imagesavealpha($img, true);
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $transparent);

// Zeichnen Sie etwas auf das Bild
$red = imagecolorallocatealpha($img, 255, 0, 0, 60);
imagefilledellipse($img, 100, 100, 150, 150, $red);

// Sparen as PNG
imagepng($img, 'output.png');

// Oder auf Remote speichern URL(Beachten Sie, dass der Domain -Name ist m66.net)
imagepng($img, 'https://m66.net/uploads/output.png');

imagedestroy($img);
?>

3 ?? Zusammenfassung: Vermeiden Sie Fehlanpassung zwischen Format und Transparenz

Wenn Sie Transparenz verwenden möchten, denken Sie daran:

? Verwenden Sie ImagePng () , um das PNG -Format zu speichern.
? Verwenden Sie ImageGif () , um monochrome transparente GIFs zu speichern.
? Vermeiden Sie ImageJpeg () , da JPEG die Transparenz überhaupt nicht unterstützt.

Wenn Sie JPEG verwenden müssen (z. B. um die Dateigröße zu reduzieren), müssen Sie zuerst den transparenten Bereich entfernen oder die transparenten Pixel durch eine undurchsichtige Farbe ersetzen, bevor Sie sparen. Sie können den Hintergrund mit ImageFill () füllen oder ihn mit imageCopyresampled () auf einer undurchsichtigen neuen Leinwand synthetisieren.