Aktueller Standort: Startseite> Neueste Artikel> Wie konvertieren Sie einen SVG -Pfad in ein Array von Koordinaten, die von der ImageOpenPolygon () -Funktion erkannt werden?

Wie konvertieren Sie einen SVG -Pfad in ein Array von Koordinaten, die von der ImageOpenPolygon () -Funktion erkannt werden?

M66 2025-06-12

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.

Verstehen Sie den Unterschied zwischen SVG -Pfad und ImageOpenpolygon ()

  • 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.

Schritt 1: SVG -Koordinaten extrahieren

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;
}

Tipps:

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.

Schritt 2: Verwenden Sie ImageOpenpolygon (), um zu zeichnen

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.

Schritt 3: Verarbeitung komplexerer Szenarien

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.

Zusammenfassen

Der Kern der Umwandlung des SVG -Pfades in das erforderliche Format von ImageOpenpolygon () lautet:

  1. Teilen Sie die SVG -Zeichenfolge nach Anweisungen auf;

  2. Extrahieren Sie jedes Paar Koordinatenwerte;

  3. 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!