In der GD -Bibliothek von PHP wird die Funktion imageOpenpolygon () verwendet, um ein offenes Polygon auf einem Bild zu zeichnen. Im Vergleich zu ImagePolygon () (geschlossenes Polygon) verbindet ImageOpenPolygon () die Start- und Endpunkte nicht automatisch visuell. Eine häufige Entwicklungsbedarf besteht darin, verschiedene Formen auf Bildern mit transparenten Hintergründen zu zeichnen. Kann ImageOpenPolygon () auf Bilder, die transparente Hintergründe unterstützen, richtig funktionieren? Dieser Artikel wird dies ausführlich analysieren.
Die grundlegende Syntax von ImageOpenpolygon () lautet wie folgt:
bool imageopenpolygon(
GdImage $image,
array $points,
int $num_points,
int $color
)
$ bild : GD -Bildressource, die von ImageCrreatTueColor () oder einer ähnlichen Funktion erstellt wurde.
$ Punkte : Eine Reihe von Punktkoordinaten.
$ num_points : Die Anzahl der Punkte.
$ color : Die Farbe, die zum Zeichnen der Linie verwendet wird (die auf dem Bild zugewiesene Farbkennung).
Hinweis: Die GD -Erweiterung von PHP muss aktiviert werden, um diese Funktion zu verwenden.
Um einen transparenten Hintergrund zu unterstützen, müssen Sie normalerweise die folgenden Schritte befolgen:
Verwenden Sie ImageCrreatTueColor (), um ein echtes Farbbild zu erstellen.
Aktivieren Sie den Alpha -Kanal -Speichern (unter Verwendung von ImagesAvealpha () ).
Füllen Sie eine vollständig transparente Hintergrundfarbe aus.
Beispiel:
<?php
// Bild mit transparentem Hintergrund erstellen
$width = 400;
$height = 300;
$image = imagecreatetruecolor($width, $height);
// Ermöglicht das Speichern des gesamtenalphaKanalinformationen
imagesavealpha($image, true);
// Gefüllt mit transparentem Hintergrund
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
// Polygonpunkte definieren
$points = [
50, 50,
300, 100,
250, 250,
100, 200
];
// Definieren Sie die Zeichenfarbe
$color = imagecolorallocate($image, 255, 0, 0); // Rot
// Polygone aufziehen
imageopenpolygon($image, $points, count($points) / 2, $color);
// Ausgabe zum Browser
header('Content-Type: image/png');
imagepng($image);
// Ressourcen zerstören
imagedestroy($image);
?>
Mit dem obigen Code können wir rote offene Polygone auf einem transparenten Hintergrund zeichnen.
Aus der zugrunde liegenden Implementierung der GD -Bibliothek zeichnet ImageOpenPolygon () im Wesentlichen nur eine Reihe von Liniensegmenten und wirkt sich nicht auf das Attribut des Hintergrundtransparenz des Bildes aus. Daher ist seine Kompatibilität für transparente Hintergrundbilder gut, was sich in:
Der Alpha -Kanal wird nicht zerstört : Wenn das Bild korrekt aktiviert ist, behält das Bild weiterhin einen transparenten Hintergrund, nachdem ImageOpenPolygon () gezeichnet ist.
Die Farbverarbeitung ist normal : Solange die zugewiesene Zeichnungsfarbe nicht als transparent eingestellt ist (dh die Transparenz wird unter Verwendung von ImageColorallocatealpha () ) nicht angegeben, sind die gezogenen Linien undurchsichtig, während der Hintergrund transparent bleibt.
Der Leistungsauswirkungen ist gering : Im Vergleich zu geschlossenen Polygonen wird nur ein Liniensegment in offenen Polygonen gezogen, und es gibt keinen signifikanten Leistungsunterschied.
Es müssen jedoch zwei Punkte beachtet werden:
Wenn nicht-Aussetzer-Farbbilder verwendet werden (z. B. von Palettenbildern, die von Imagecreate () erstellt wurden), kann die Transparenzverarbeitung unvollständig sein, was dazu führt, dass die Hintergrundfarbe nicht vollständig transparent ist.
Beim Exportieren in das JPEG -Format wird der transparente Teil schwarz oder weiß gefüllt. Es wird empfohlen, das PNG -Format zu verwenden, um transparente Hintergrundbilder zu speichern.
ImageOpenpolygon () kann Formen auf Bildern mit transparenten Hintergründen vollständig zeichnen und eine gute Kompatibilität aufweisen und den ursprünglichen transparenten Effekt nicht zerstören. Achten Sie nur darauf, den Alpha -Kanal richtig zu aktivieren.
Wenn Sie weiter gehen müssen, z. B. dynamische Erzeugung komplexer Grafiken mit transparenten Hintergründen und das Anzeigen auf Webseiten, können Sie das generierte PNG -Bild über die URL übergeben, z. B.: