Im PHP ist ImageGif () eine häufig verwendete Funktion zum Speichern von Bildern im GIF -Format. Obwohl das GIF -Format selbst irgendeine Form der Transparenz unterstützt, unterstützt die ImageGIF () -Funktion "Alpha -Transparenz" nicht vollständig - d. H. Die partielle Transparenz bestimmter Pixelpunkte in einem Bild.
Das erste, was zu wissen ist, ist, dass GIF -Formate und andere Formate (wie PNG, JPEG) in der Umgang mit Transparenz sehr unterschiedlich sind. Die Transparenz des GIF -Formats basiert nicht auf dem "Alpha -Kanal" des Pixels, sondern wird durch Angabe einer bestimmten transparenten Farbe für das Bild erreicht. Dies bedeutet, dass GIF -Bilder nur eine vollständig transparente Farbe haben können, ohne die teilweise Transparenz oder Tradiententransparenz zu unterstützen.
Die Transparenz von GIF funktioniert wie folgt:
Jedes Pixel des Bildes hat einen festen Farbindex.
Beim Erstellen eines GIF -Bildes können Sie eine Farbe als "transparent" angeben.
Alle anderen Farben sind undurchsichtig und können im selben Bild keinen transparenten Effekt haben.
Dies führt zu einem Problem: Wenn wir ein Bild über die ImageGif () -Funktion von PHP speichern, kann es nur diese index farbbasierte Transparenz verarbeiten, kann jedoch nicht die gemeinsame "Alpha-Transparenz" in Formaten wie PNG verarbeiten, dh der Transparenzwert jedes Pixels variiert zwischen 0 und 255.
Die ImageGif () -Funktion betreibt tatsächlich ein palettenbasiertes Bild. Bilder im GIF-Format basieren auf palettenbasiertem, wobei jedes Pixel einem Farbindex entspricht, und Farben in der Palette können nur bis zu 256 Farben unterstützen. Dies ermöglicht es jedem Pixel, eine bestimmte Farbe zu haben, und die Transparenzstufe kann nicht wie im PNG -Format über den Alpha -Kanal gesteuert werden.
Wenn Sie ein Bild über ImageGif () speichern, verarbeitet PHP es nur basierend auf der angegebenen transparenten Farbe. Wenn das Bild Gradienten oder mehrere verschiedene Transparenzebenen enthält, speichert ImageGif () diese Informationen nicht korrekt. Es konvertiert alle verschiedenen Transparenzpixel in eine feste transparente Farbe, die zu einer Verzerrung der Bildeffekte führen kann, insbesondere in Bildern, die teilweise Transparenzeffekte erfordern.
Die Transparenz eines GIF kann nur "vollständig transparent" oder "vollständig undurchsichtig" sein, und es hat keine Möglichkeit, die im Alpha -Kanal häufig vorkommende Gradiententransparenz zu unterstützen. Zum Beispiel kann das PNG -Format für jedes Pixel im Bild unterschiedliche Transparenzebenen (0 bis 255) verarbeiten, sodass das Bild einen Gradiententransparenzeffekt haben kann.
ImageGif () unterstützt nur diesen Mechanismus "Monochromtransparenz", sodass Bilder mit Gradiententransparenz oder partiellen Transparenzeffekten nicht ordnungsgemäß gespeichert werden können. Diese technische Einschränkung bezieht sich auf die Gestaltung des GIF -Formats selbst, jedoch nicht mit der ImageGIF () -Funktion im PHP.
Wenn Sie mit Bildern arbeiten müssen, die Alpha -Transparenz enthalten, besteht der beste Weg, das PNG -Format zu verwenden, da PNG den Alpha -Kanal pro Pixel unterstützt, wodurch die Transparenz jedes Pixels eine präzise Kontrolle ermöglicht.
In PHP können Sie die Funktion imagePng () verwenden, um PNG -Bilder zu speichern, die die Alpha -Transparenz unterstützen. ImagePng () ermöglicht die Unterstützung von Transparenz beim Speichern und kann die ursprünglichen Transparenzinformationen des Bildes ohne Farbindexumwandlung beibehalten.
Beispielsweise bei Verwendung von ImagePng () , um ein Bild mit Transparenz zu speichern:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Erstellen Sie ein Bild mit einem transparenten Hintergrund</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">200</span></span><span>, </span><span><span class="hljs-number">200</span></span><span>);
</span><span><span class="hljs-comment">// Transparenz aktivieren</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagesavealpha</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$transparent</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocatealpha</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">127</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagefill</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$transparent</span></span><span>);
</span><span><span class="hljs-comment">// Zeichnen Sie Inhalte auf einem Bild</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-string">'output.png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In diesem Beispiel ermöglicht die Funktion von ImagesVealpha () den Alpha -Kanalunterstützung und erstellt einen vollständig transparenten Hintergrund mithilfe von ImageColorallocatealpha () .
Der Grund, warum ImageGif () die Alpha -Transparenz nicht unterstützen kann, liegt darin, dass das Design des GIF -Formats selbst begrenzt ist. GIF unterstützt nur monochromatische Transparenz, d. H. Eine bestimmte Farbe wird als transparente Farbe verwendet und unterstützt keine verschiedenen Transparenzstufen (Alpha -Kanäle) pro Pixel. Wenn Sie Bilder benötigen, um Gradiententransparenz oder teilweise Transparenz zu haben, wird empfohlen, das PNG -Format zu verwenden und die Funktion imagePNG () zu verwenden, um das Bild für die Unterstützung höherer Qualität zu speichern.