Position actuelle: Accueil> Derniers articles> Comment convertir un chemin SVG en un tableau de coordonnées reconnues par la fonction ImageOpenPolygon ()?

Comment convertir un chemin SVG en un tableau de coordonnées reconnues par la fonction ImageOpenPolygon ()?

M66 2025-06-12

Lors du traitement des images dans PHP, ImageOpenPolygon () est une fonction utile qui dessine un polygone basé sur un ensemble de points. Cependant, si vos données d'origine sont le chemin du chemin du SVG (propriété D ), vous devez d'abord analyser le chemin SVG en un format reconnaissable par imageOpenPolygon () : un tableau de coordonnées simple. Cet article expliquera comment terminer cette conversion étape par étape.

Comprendre la différence entre le chemin SVG et ImageOpenPolygon ()

  • Path SVG (attribut D ) : généralement une chaîne, telle que:

     M 10 10 L 100 10 L 100 100 L 10 100 Z
    

    m représente le déménagement, L représente directement et Z représente le chemin fermé.

  • ImageOpenPolygon () : nécessite un tableau unidimensionnel , le format est: [x1, y1, x2, y2, ..., xn, yn] .

Par conséquent, notre objectif est de traduire les instructions du chemin SVG vers un tel tableau.

Étape 1: Extraire les coordonnées SVG

Nous devons d'abord analyser la chaîne d'attribut D de SVG et extraire toutes les coordonnées utiles. Cela peut être fait avec une simple correspondance régulière.

 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' Indique un chemin fermé,Peut être géré sélectivement(Par exemple, copier le point de départ à la fin)
        }
    }

    return $points;
}

Conseils:

Si votre chemin SVG contient des instructions complexes telles que C (instruction de courbe), cet analyseur simple n'est pas pris en charge . Ici, nous traitons principalement de Basic M , L et Z.

Étape 2: Utilisez ImageOpenPolygon () pour dessiner

Une fois que vous obtenez le tableau de coordonnées converti, le dessin du polygone est très simple.

 // Exemple SVG chemin
$svgPath = 'M 10 10 L 100 10 L 100 100 L 10 100 Z';

// 解析chemin
$points = parseSvgPathToPoints($svgPath);

// Créer une image
$image = imagecreatetruecolor(200, 200);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

imagefill($image, 0, 0, $white);

// Dessiner des polygones
imageopenpolygon($image, $points, count($points) / 2, $black);

// Image de sortie
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

Lors de l'accès à ce fichier PHP, il affichera directement l'image polygone dessinée. Si vous souhaitez enregistrer le fichier au lieu de la sortie, vous pouvez transformer l'imagepng ($ image, 'your_path.png') .

Étape 3: Traitement de scénarios plus complexes

Si vous avez des fichiers SVG plus complexes (tels que la bibliothèque d'icônes téléchargée à partir de m66.net ), vous pourriez avoir besoin:

  • Prend en charge les instructions relatives (minuscules m / l)

  • Courbe de support (c / q)

  • La prise en charge des chemins composites nécessite un analyseur SVG plus puissant, comme l'utilisation de la bibliothèque SVGPathData PHP (l'exemple de lien utilise le nom de domaine m66.net ).

Bien sûr, si vos besoins analysent simplement les formes de base, les règles simples ci-dessus sont suffisantes.

Résumer

Le cœur de la conversion du chemin SVG au format requis de ImageOpenPolygon () est:

  1. Diviser la chaîne SVG par instruction;

  2. Extraire chaque paire de valeurs de coordonnées;

  3. Assemblez-vous dans le tableau 1D requis pour PHP.

Avec ce processus maîtrisé, vous pouvez facilement implémenter SVG vers le dessin d'image en PHP!