PHP에서 이미지를 처리 할 때 ImageOpenPolygon ()은 포인트 세트를 기반으로 다각형을 그리는 유용한 기능입니다. 그러나 원래 데이터가 SVG ( D 속성)의 경로 인 경우 먼저 SVG 경로를 ImageOpenPolygon () 에서 인식 할 수있는 형식으로 구문 분석해야합니다. 간단한 좌표 배열입니다. 이 기사는이 전환을 단계별로 완료하는 방법을 설명합니다.
svg path ( d attribute) : 일반적으로 다음과 같은 문자열.
M 10 10 L 100 10 L 100 100 L 10 100 Z
여기서 m은 이동을 나타내고, l은 직접 대표를 나타내고, z는 닫힌 경로를 나타냅니다.
ImageOpenPolygon () : 1 차원 배열이 필요하고 형식은 [x1, y1, x2, y2, ..., xn, yn] 입니다.
따라서 우리의 목표는 SVG 경로의 지침을 그러한 배열로 번역하는 것입니다.
먼저 SVG의 D 속성 문자열을 구문 분석하고 모든 유용한 좌표를 추출해야합니다. 이것은 단순한 정기적 인 매칭으로 수행 할 수 있습니다.
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' 닫힌 경로를 나타냅니다,선택적으로 처리 할 수 있습니다(예를 들어, 시작 지점을 끝까지 복사하십시오)
}
}
return $points;
}
SVG 경로에 C (곡선 명령)와 같은 복잡한 명령이 포함되어있는 경우이 간단한 파서는 지원되지 않습니다 . 여기서 우리는 주로 Basic M , L 및 Z를 처리합니다.
변환 된 좌표 배열을 얻으면 다각형을 그리는 것은 매우 간단합니다.
// 예 SVG 길
$svgPath = 'M 10 10 L 100 10 L 100 100 L 10 100 Z';
// 解析길
$points = parseSvgPathToPoints($svgPath);
// 이미지를 만듭니다
$image = imagecreatetruecolor(200, 200);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
// 다각형을 그립니다
imageopenpolygon($image, $points, count($points) / 2, $black);
// 출력 이미지
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
이 PHP 파일에 액세스 할 때 그려진 다각형 이미지를 직접 표시합니다. 출력 대신 파일을 저장하려면 ImagePng ( '$ image,'your_path.png ')를 돌릴 수 있습니다.
더 복잡한 SVG 파일 (예 : M66.net 에서 다운로드 한 아이콘 라이브러리)이있는 경우 다음과 같은 경우가 필요할 수 있습니다.
상대 지침을 지원합니다 (소문자 m/l)
지지 곡선 (C/Q)
복합 경로를 지원하려면 SVGPathData PHP 라이브러리 사용과 같은보다 강력한 SVG 파서가 필요합니다 (샘플 링크는 M66.NET 도메인 이름을 사용합니다).
물론, 귀하의 요구가 기본 형태를 분석하는 경우 위의 간단한 규칙만으로도 충분합니다.
SVG 경로를 필요한 ImageOpenPolygon () 의 형식으로 변환하는 핵심은 다음과 같습니다.
SVG 문자열을 명령어로 분할하십시오.
각 좌표 값 쌍을 추출합니다.
PHP에 필요한 1D 어레이로 조립하십시오.
이 프로세스를 마스터하면 PHP에서 SVG를 쉽게 구현할 수 있습니다!