Wenn Sie mit der GD -Bibliothek in PHP zeichnen, müssen Sie normalerweise einen Alpha -Kanal verwenden, um ihn in Verbindung mit dem Alpha -Kanal zu verarbeiten. In diesem Artikel werde ich Sie durch die Bildopenpolygon () -Funktion mit einem Alpha -Gradienten durch die Zeichnung eines glatten und durchscheinenden Polygon -Effekts führen.
ImageOpenpolygon () ist eine Zeichnungsfunktion in der PHP -GD -Bibliothek, mit der offene Polygone auf Leinwand gezeichnet werden. Im Gegensatz zu ImagePolygon () (Schließen von Polygon) zeichnet ImageOpenpolygon () nur die Linien des Polygons und schließt nicht automatisch die Anfangs- und Endpunkte.
Die grundlegende Syntax der Funktion lautet wie folgt:
bool imageopenpolygon(GdImage $image, array $points, int $num_points, int $color)
$ Bild : Zielbildressource.
$ Punkte : Ein Array mit Punktkoordinaten im Format [x1, y1, x2, y2, ..., xn, yn] .
$ num_points : Die Anzahl der Punkte.
$ Farbe : Die für das Zeichnen verwendete Farbe.
Die GD -Bibliothek unterstützt die Farben des RGBA -Formats und ermöglicht Farben, Transparenz (Alpha) zu haben. Durch die Kontrolle des Alpha -Werts kann der transparente Effekt des Gradienten erreicht werden.
Hier ist ein praktisches Beispiel, das zeigt, wie ein Polygon mit einem halbtransparenten Gradienten unter Verwendung von ImageOpenpolygon () zeichnet.
<?php
// Erstellen Sie eine Leinwand
$width = 400;
$height = 400;
$image = imagecreatetruecolor($width, $height);
// Aktivieren alpha Kanalspareninformationen
imagesavealpha($image, true);
// Füllen Sie den Hintergrund mit transparenten Farben aus
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
// Definieren Sie den Punkt eines Polygons
$points = [
50, 50,
350, 50,
350, 350,
50, 350
];
// Zeichnen Sie Polygonlinien mit unterschiedlicher Transparenz
$steps = 10;
for ($i = 0; $i <= $steps; $i++) {
$alpha = (int)($i * (127 / $steps)); // alpha aus0(undurchsichtig)ankommen127(Voll transparent)
$color = imagecolorallocatealpha($image, 255, 0, 0, $alpha); // Rot,Mit unterschiedlicher Transparenz
// Berechnen Sie den Skalierungspunkt
$scaledPoints = [];
foreach ($points as $index => $coord) {
$offset = 5 * $i;
if ($index % 2 == 0) { // x koordinieren
$scaledPoints[] = $coord + $offset;
} else { // y koordinieren
$scaledPoints[] = $coord + $offset;
}
}
imageopenpolygon($image, $scaledPoints, count($scaledPoints) / 2, $color);
}
// Ausgabe Bild
header('Content-Type: image/png');
imagepng($image);
// Ressourcen zerstören
imagedestroy($image);
?>
Dieser Code schießt durch eine Schleife, erweitert das Polygon leicht und reduziert die Transparenz gleichzeitig, wodurch ein halbtransparenter Gradient erreicht wird, der vom Zentrum nach außen abweicht. Da ImageOpenpolygon () ein offenes Polygon zeichnet, gibt es keine feste Füllung in der Mitte, wodurch ein sehr delikates Gradientenliniengefühl beibehalten wird.
Wenn Sie den endgültigen Effekt sehen möchten, können Sie den oben genannten Code als .php -Datei speichern und auf Ihren Server hochladen, z. B.:
https://m66.net/demo/transparent_polygon.php
(Denken Sie daran, den Server mit einer PHP -Umgebung zu konfigurieren und sicherzustellen, dass die GD -Bibliothek aktiviert ist.)
ImagesAvealpha ($ image, true) muss aufgerufen werden, ansonsten werden transparente Informationen bei der Ausgabe nicht gespeichert.
Der letzte Parameter von ImageColorallocatealpha () ist der Alpha -Wert, der von 0 (vollständig undurchsichtig) bis 127 (vollständig transparent) reicht.
Ab PHP 8.0 wurde das Objektmodell der GD -Bibliothek geändert. Achten Sie also auf Versionsunterschiede.
Die Verwendung von ImageOpenpolygon () mit Alpha-Gradienten kann tatsächlich durchscheinende und mehrstufige Linienzeichnungseffekte erreichen. Diese Technologie kann nicht nur verwendet werden, um coole UI -Komponenten zu zeichnen, sondern auch dynamische Hintergründe, Spezialeffekt -Grafiken usw. zu generieren, was sehr praktisch ist.