In der GD -Bibliothek von PHP wird die Funktion "ImageColorTransparent" verwendet, um transparente Farben für ein Bild festzulegen. Seine grundlegende Funktion besteht darin, eine Farbe im Bild als transparente Farbe anzugeben, damit alle Pixel dieser Farbe als transparent angezeigt werden. In der tatsächlichen Entwicklung stellen viele Menschen jedoch fest, dass, wenn Sie transparente Bereiche im Bild genau festlegen möchten, insbesondere komplexe Farben oder Gradientenbereiche, die direkte Aufruf von ImageColorTransparent den idealen Effekt nicht erreichen kann. In diesem Artikel wird detailliert vorgestellt, wie ImagesColorTransparent verwendet wird, um transparente Bereiche genau festzulegen und einige praktische Tipps und Beispiele zu geben.
<?php
// Erstellen a100x100Wahres Farbbild
$image = imagecreatetruecolor(100, 100);
// Füllen Sie einen roten Hintergrund für das Bild
$red = imagecolorallocate($image, 255, 0, 0);
imagefill($image, 0, 0, $red);
// Setzen Sie rot auf transparente Farbe
imagecolortransparent($image, $red);
// Ausgabebild
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Im obigen Code legt im obiger Code fest, dass Red $ Red transparent ist, so dass der rote Teil im Ausgangs -PNG -Bild als transparent angezeigt wird.
ImageColorTransparent kann nur eine Farbe für transparent einstellen. Diese Farbe ist der Farbindexwert, der durch ImagebildColoralclocation oder ImageColorat erhalten wird. Das Problem ist:
Nur eine Farbe kann transparent sein, aber nicht tradienten oder mehrfarbig transparent.
Wenn das Bild eine wahre Farbe ist (erstellt durch ImagecrreatTueColor ), konvertiert die transparente Farbeinstellung automatisch in den Palettenmodus, was zu einer Farbverzerrung führen kann.
Die Farbanpassung muss vollständig konsistent sein, und leichte Abweichungen in der Farbe führen zu Transparenzversagen.
Konvertieren Sie zuerst das wahre Farbbild in ein Palettenbild ( Imagetruecolortopalette ) und stellen Sie dann die transparente Farbe ein.
<?php
$image = imagecreatetruecolor(100, 100);
// Zeichnen Sie ein grünes Rechteck
$green = imagecolorallocate($image, 0, 255, 0);
imagefill($image, 0, 0, $green);
// In Palettenbild konvertieren,Am beliebtesten256Art der Farben
imagetruecolortopalette($image, false, 256);
// Finden Sie den Farbindex, der transparent sein muss
$transparentIndex = imagecolorclosest($image, 0, 255, 0);
// Setzen Sie transparente Farbe
imagecolortransparent($image, $transparentIndex);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Beachten Sie, dass dieser Ansatz für Bilder mit weniger Farben und festen Farben geeignet ist, und Farben können nach der Umwandlung in eine Palette Details verlieren.
Für echte Farbbilder wird empfohlen, PNG -Bilder mit Alpha -Kanal- und Funktionsbildern zu verwenden, um Transparenz auf Pixelebene festzulegen.
<?php
$image = imagecreatetruecolor(100, 100);
// Aktivieren alpha Kanalsparen
imagesavealpha($image, true);
// Zeichnen Sie einen durchscheinenden blauen Hintergrund
$transBlue = imagecolorallocatealpha($image, 0, 0, 255, 80);
imagefill($image, 0, 0, $transBlue);
// Zeichnen Sie einen undurchsichtigen weißen Kreis
$white = imagecolorallocatealpha($image, 255, 255, 255, 0);
imagefilledellipse($image, 50, 50, 80, 80, $white);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Diese Methode ist flexibler, unterstützt Gradienten und durchscheinende Effekte, die für komplexe und transparente Bedürfnisse geeignet sind.
Angenommen, Sie haben ein Bild und möchten die Pixel in einem bestimmten Farbbereich so einstellen, dass Sie transparent sind. Sie können Pixel -Traversal verwenden, um in Kombination mit Farbe zu beurteilen:
<?php
$image = imagecreatefrompng('http://m66.net/sample.png');
// Holen Sie sich Bildbreite und Höhe
$width = imagesx($image);
$height = imagesy($image);
// Definieren Sie den Farbbereich, um transparent zu sein(Wie in der Nähe von Weiß)
$threshold = 30;
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// Stellen Sie fest, ob es nahe an Weiß ist
if ($r > 255 - $threshold && $g > 255 - $threshold && $b > 255 - $threshold) {
// Setzen Sie dieses Pixel so transparent
imagesetpixel($image, $x, $y, imagecolorallocatealpha($image, 0, 0, 0, 127));
}
}
}
// reservieren alpha Kanalinformationen
imagesavealpha($image, true);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Durch Durchqueren von Pixeln können Sie transparente Bereiche genauer steuern und für die komplexe Bildtransparenzverarbeitung geeignet sind.
ImageColorTransparent eignet sich zum Einstellen eines einzelnen Farbes transparent, aber der Anwendungsbereich ist begrenzt.
Wahre Farbbilder können mit dem Palettenmodus mit ImageColorTransparent kombiniert werden, verliert jedoch die Farbe.
Es wird empfohlen, PNG -Bilder mit Alpha -Kanal zu verwenden und detailliert und transparent durch ImagesAvealpha und ImageColorallocatealpha zu erreichen.
Komplexe Transparenzanforderungen können durch Pixel -Traversal und Farburteil genau kontrolliert werden.
Durch das Beherrschen der oben genannten Fähigkeiten können Sie die PHP -GD -Bibliothek flexibel verwenden, um die transparenten Bildbereiche genau festzulegen, um eine Vielzahl von Entwicklungsbedürfnissen zu erfüllen.