Bei Verwendung von PHP zum Verarbeiten von Bildern verwenden wir häufig die Funktion "ImageColorallocatealpha () in der GD -Bibliothek, um Farben mit Alpha -Kanälen (Transparenz) zuzuweisen. Seine Syntax ist wie folgt:
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
Wobei der Wert von $ alpha von 0 (vollständig undurchsichtig) bis 127 (vollständig transparent) reicht.
Aber das Problem ist: Selbst wenn wir PNG -Bilder mit Alpha -Kanal auf der Serverseite generieren, in einigen alten Browsern (wie frühen IE -Versionen) oder in einigen Umgebungen, die das Alpha -Rendering nicht unterstützen, unterscheiden sich die Effekte, die Benutzer sehen, wie der transparente Teil grau oder schwarz, oder es kann nicht normal angezeigt werden.
Wie können wir diesen Vorschau -Effekt mithilfe von PHP -Code auf der Serverseite verbessern, damit selbst Browser, die Alpha nicht unterstützen, zumindest einen akzeptablen anmutigen Abbau sehen können?
Der Schlüssel zur Lösung dieses Problems ist:
Bei der Erzeugung von PNG -Bildern mit Alpha -Kanal wird ein zusätzliches Bild mit "gefliester" Hintergrund für Browser generiert, die Alpha nicht unterstützen.
Mit anderen Worten, wenn wir Farben mit ImageColorallocatealpha () zuweisen, betrachten wir auch eine Version, die Transparenz beseitigt und den Hintergrund direkt kombiniert.
Das folgende Beispiel zeigt, wie die PHP -GD -Bibliothek verwendet wird, um zwei Bilder zu generieren: ein PNG, der den Alpha -Kanal behält, und das andere ist ein normales PNG, das mit einem weißen Hintergrund für Browser synthetisiert wird, die keine Transparenz unterstützen.
<?php
// Erstellen Sie eine Leinwand
$width = 300;
$height = 100;
$image = imagecreatetruecolor($width, $height);
// Offen alpha Kanalsparen
imagesavealpha($image, true);
// Weisen Sie eine völlig transparente Hintergrundfarbe zu
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
// Weisen Sie ein durchscheinendes Rot zu
$redAlpha = imagecolorallocatealpha($image, 255, 0, 0, 63); // 50% transparent
// 画一个半transparent矩形
imagefilledrectangle($image, 50, 25, 250, 75, $redAlpha);
// Gürtel sparen alpha von PNG
imagepng($image, 'output_with_alpha.png');
// --------- Erzeugen alpha von版本 ---------
// Erstellen Sie eine Leinwand auf weißem Hintergrund
$background = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($background, 255, 255, 255);
imagefill($background, 0, 0, $white);
// 将transparent图片拷贝到白色背景上(Entfernen alpha)
imagecopy($background, $image, 0, 0, 0, 0, $width, $height);
// Speichern alpha von PNG
imagepng($background, 'output_no_alpha.png');
// Reinigen Sie den Speicher
imagedestroy($image);
imagedestroy($background);
echo 'Die Bildgenerierung ist abgeschlossen:<a href="https://m66.net/output_with_alpha.png">带transparent通道</a> Und <a href="https://m66.net/output_no_alpha.png">无transparent版本</a>';
?>
1 ?? Weisen Sie Farben mit Alpha <br> zu Verwenden Sie ImageColorallocatealpha (), um die transparenten oder halbtransparenten Teile zu färben.
2 ?? Generieren Sie das Hauptbild für Browser, die Alpha <br> unterstützen Dieser Teil wird nur als PNG gespeichert und kann von modernen Browsern unterstützt werden.
3 ?? Erzeugen Sie Abbaudiagramme für Browser, die Alpha <br> nicht unterstützen Erstellen Sie eine Leinwand mit weißem oder anderem Hintergrund und kopieren Sie das Hauptbild direkt, damit der transparente Teil zu einem soliden Hintergrund wird.
4 ?? Selektives Laden von Front-End <br> Sie können JavaScript verwenden, um festzustellen, ob Alpha PNG auf der Webseite unterstützt wird, oder zwei Download -Links für Benutzer zur Auswahl zur Verfügung stellen.