Beim Verarbeitung von Bildern in PHP ist ImageOpenPolygon () eine nützliche Funktion, die ein Polygon basierend auf einer Reihe von Punkten zeichnet. Wenn Ihre ursprünglichen Daten jedoch der Pfad der SVG ( D -Eigenschaft) sind, müssen Sie zuerst den SVG -Pfad in ein von ImageOpenpolygon () erkennbarer Format analysieren: ein einfaches Koordinaten -Array. In diesem Artikel wird erläutert, wie diese Konvertierung Schritt für Schritt abgeschlossen werden kann.
SVG -Pfad ( D -Attribut) : Normalerweise eine Zeichenfolge, wie z. B.:
M 10 10 L 100 10 L 100 100 L 10 100 Z
Wobei m sich bewegt, l, l direkt zu und z einen geschlossenen Pfad.
ImageOpenpolygon () : Erfordert ein eindimensionales Array , das Format lautet: [x1, y1, x2, y2, ..., xn, yn] .
Unser Ziel ist es daher, die Anweisungen im SVG -Pfad in ein solches Array zu übersetzen.
Zuerst müssen wir die D -Attribut -Zeichenfolge von SVG analysieren und alle nützlichen Koordinaten extrahieren. Dies kann mit einfachem regulärem Matching erfolgen.
function parseSvgPathToPoints($svgPath) {
$commands = preg_split('/(?=[MLZmlz])/', $svgPath, -1, PREG_SPLIT_NO_EMPTY);
$points = [];
foreach ($commands as $command) {
$type = strtoupper(substr(trim($command), 0, 1));
$coords = trim(substr(trim($command), 1));
if ($type === 'M' || $type === 'L') {
$pairs = preg_split('/[\s,]+/', $coords);
for ($i = 0; $i < count($pairs) - 1; $i += 2) {
$x = (float)$pairs[$i];
$y = (float)$pairs[$i + 1];
$points[] = $x;
$points[] = $y;
}
} elseif ($type === 'Z') {
// 'Z' Zeigt einen geschlossenen Pfad an,Kann selektiv behandelt werden(Zum Beispiel den Anfangspunkt bis zum Ende kopieren)
}
}
return $points;
}
Wenn Ihr SVG -Pfad komplexe Anweisungen wie C (Kurvenanweisung) enthält, wird dieser einfache Parser nicht unterstützt . Hier beschäftigen wir uns hauptsächlich mit Basic M , L und Z.
Sobald Sie das konvertierte Koordinaten -Array erhalten haben, ist das Zeichnen des Polygons sehr einfach.
// Beispiel SVG Weg
$svgPath = 'M 10 10 L 100 10 L 100 100 L 10 100 Z';
// 解析Weg
$points = parseSvgPathToPoints($svgPath);
// Erstellen Sie ein Bild
$image = imagecreatetruecolor(200, 200);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
// Polygone zeichnen
imageopenpolygon($image, $points, count($points) / 2, $black);
// Ausgabebild
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
Wenn Sie auf diese PHP -Datei zugreifen, werden direkt das gezeichnete Polygon -Bild angezeigt. Wenn Sie die Datei anstelle von Ausgabe speichern möchten, können Sie ImagePng ($ image, your_path.png ') drehen.
Wenn Sie komplexere SVG -Dateien haben (z. B. die von M66.NET heruntergeladene Icon -Bibliothek) benötigen Sie möglicherweise:
Unterstützt relative Anweisungen (Kleinbuchstaben m/l)
Unterstützungskurve (C/Q)
Die Unterstützung von zusammengesetzten Pfaden erfordert einen leistungsstärkeren SVG -Parser, z.
Wenn Ihre Bedürfnisse nur die grundlegenden Formen analysieren, reichen die obigen einfachen Regeln aus.
Der Kern der Umwandlung des SVG -Pfades in das erforderliche Format von ImageOpenpolygon () lautet:
Teilen Sie die SVG -Zeichenfolge nach Anweisungen auf;
Extrahieren Sie jedes Paar Koordinatenwerte;
Montieren Sie in das 1D -Array, das für PHP erforderlich ist.
Bei diesem Prozess können Sie SVG problemlos für Bildzeichnung in PHP implementieren!