Beim Zeichnen von Diagrammen mit der GD -Bibliothek von PHP müssen Entwickler manchmal Polygone auf Bildern zeichnen. Traditionell kann die ImageOpenPolygon () -Funktion einen hohlen Polygon -Umriss zeichnen. Aber manchmal möchten wir ImageFilnedPolygon () verwenden, um flexiblere Zeichnungseffekte zu erzielen, insbesondere wenn wir uns mit Farbfüllungen und Umrissstilen befassen müssen. In diesem Artikel wird image -fähigpolygon () anstelle von ImageOpenpolygon () vorgestellt und das Problem der Zeichnung von hohlen Polygonen gelöst.
ImageOpenpolygon () wird hauptsächlich zum Zeichnen von hohlen Polygonen verwendet, und seine Wirkung beträgt nur Striche und keine interne Füllung. ImageFilledPolygon () kann direkt ein gefülltes Polygon zeichnen.
Wenn Sie Polygone mit spezifischen Randfarben oder komplexeren Steuerungen zeichnen möchten, ist ImageFilldPolygon () flexibler. Insbesondere wenn ImageOpenPolygon () keine vielfältigeren Zeichnungsanforderungen unterstützt, ist es eine gute Alternative, die Konturzeichnung selbst zu simulieren, um die Konturzeichnung zu simulieren.
Die Grundidee ist:
Verwenden Sie ImageFilledPolygon (), um ein gefülltes Polygon zu zeichnen (mit Hintergrund oder transparenter Farbe füllen).
Verwenden Sie Imagine (), um den Rand eines Polygons getrennt zu zeichnen.
Auf diese Weise können Sie die Füllfarbe und die Randfarbe manuell steuern, um den gewünschten hohlen Polygon -Effekt zu erzielen.
Im Folgenden finden Sie ein vollständiges Beispiel, das zeigt, wie ImageFilledPolygon () verwendet wird, um einen Effekt zu erzielen , der imageOpenpolygon () ähnelt.
<?php
// Erstellen Sie eine Leinwand
$image = imagecreatetruecolor(300, 300);
// Farben zuweisen
$white = imagecolorallocate($image, 255, 255, 255);
$borderColor = imagecolorallocate($image, 0, 0, 0);
// Füllen Sie den Hintergrund
imagefill($image, 0, 0, $white);
// Definieren Sie den Punkt eines Polygons
$points = [
50, 50,
250, 70,
200, 200,
100, 250,
60, 150
];
// Polygone füllen(Verwenden Sie Hintergrundfarbe,Halten Sie die innere oder die gleiche Farbe transparent oder die gleiche Farbe)
imagefilledpolygon($image, $points, count($points) / 2, $white);
// Zeichnen Sie Polygongrenzen
$num_points = count($points) / 2;
for ($i = 0; $i < $num_points; $i++) {
$x1 = $points[$i * 2];
$y1 = $points[$i * 2 + 1];
$x2 = $points[(($i + 1) % $num_points) * 2];
$y2 = $points[(($i + 1) % $num_points) * 2 + 1];
imageline($image, $x1, $y1, $x2, $y2, $borderColor);
}
// Ausgabebild
header('Content-Type: image/png');
imagepng($image);
// Ressourcen frei machen
imagedestroy($image);
?>
ImageFilledPolygon () füllt mit Hintergrundfarbe, um zu verhindern, dass der innere Bereich verfärbt.
Verwenden Sie die Loop Imagine () , um jeden Scheitelpunkt manuell zu verbinden, um den äußeren Rand des Polygons zu zeichnen.
($ i + 1) % $ num_points stellt sicher, dass der letzte Punkt mit dem ersten Punkt verbunden werden kann.
Wenn Sie eine interne Transparenz wünschen, können Sie nach dem Erstellen der Leinwand einen transparenten Hintergrund mit ImagesAvealpha () und ImageColorallocatealpha () festlegen.
Wenn der Hintergrund keine feste Farbe hat, können Sie die Füllfarbe von bildfrautenpolygon () entsprechend einstellen oder nicht direkt füllen und die Umrisse nur durch Imagine () zeichnen.