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.
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
Où 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.
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;
}
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.
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') .
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.
Le cœur de la conversion du chemin SVG au format requis de ImageOpenPolygon () est:
Diviser la chaîne SVG par instruction;
Extraire chaque paire de valeurs de coordonnées;
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!