가, 난 그냥 내 일의 사이트에 최근 이런 짓을하고 내가 자습서를 작성해야 생각 :
예를 들어,이 질문에 또한 상단 답변을 참조하십시오 ImageMagick이 그것을 수행하는 방법 :
$usmap = '/path/to/blank/us-map.svg';
$im = new Imagick();
$svg = file_get_contents($usmap);
/*loop to color each state as needed, something like*/
$idColorArray = array(
"AL" => "339966"
,"AK" => "0099FF"
...
,"WI" => "FF4B00"
,"WY" => "A3609B"
);
foreach($idColorArray as $state => $color){
//Where $color is a RRGGBB hex value
$svg = preg_replace(
'/id="'.$state.'" style="fill:#([0-9a-f]{6})/'
, 'id="'.$state.'" style="fill:#'.$color
, $svg
);
}
$im->readImageBlob($svg);
/*png settings*/
$im->setImageFormat("png24");
$im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1); /*Optional, if you need to resize*/
/*jpeg*/
$im->setImageFormat("jpeg");
$im->adaptiveResizeImage(720, 445); /*Optional, if you need to resize*/
$im->writeImage('/path/to/colored/us-map.png');/*(or .jpg)*/
$im->clear();
$im->destroy();
단계 정규식 색상 교체는 SVG 경로 XML 및 ID & 색상 값은 어떻게 저장되어에 따라 다를 수 있습니다.서버에 파일을 저장하지 않으려면 출력
<?php echo '<img src="data:image/jpg;base64,' . base64_encode($im) . '" />';?>
같은베이스 (64)와 이미지 (당신이 명확 사용하기 전에/파괴) 할 수 있지만이 좋겠 있도록 즉 64 기수로 PNG로 문제가 아마도 JPEG로 출력베이스 64에있는
당신은 내가 이전 고용주의 영업 지역지도를 위해 한 여기에 예를 볼 수 있습니다
:
시작 : https://upload.wikimedia.org/wikipedia/commons/1/1a/Blank_US_Map_(states_only).svg
마침 : 상태에 채우기를 변경
1) 대신 정규식 루프의 :
편집
위를 쓰기 때문에, 나는이 개 개선 된 기술로 왔어요 스타일 규칙을 만들려면 CSS를 사용하십시오.
<style type="text/css">
#CA,#FL,HI{
fill:blue;
}
#Al, #NY, #NM{
fill:#cc6699;
}
/*etc..*/
</style>
그런 다음 하나의 텍스트를 injec으로 대체 할 수 있습니다 imagick jpeg/png 생성을 진행하기 전에 CSS 규칙을 svg에 적용하십시오. 색상이 변경되지 않으면 css를 재정의하여 경로 태그에 인라인 채우기 스타일이 없는지 확인하십시오.
2) 실제로 jpeg/png 이미지 파일을 만들 필요가 없으며 (구식 브라우저를 지원할 필요가없는 경우) svg를 jQuery로 직접 조작 할 수 있습니다. 당신은 IMG 또는 개체 태그를 사용하여 SVG를 매립 SVG 경로에 액세스 할 수 없습니다, 그래서 당신은해야합니다 직접 같은 웹 페이지의 HTML에 SVG XML을 포함 :
다음 색상을 변경
<div>
<?php echo file_get_contents('/path/to/blank/us-map.svg');?>
</div>
는만큼 간단합니다 :
<script type="text/javascript" src="/path/to/jquery.js"></script>
<script type="text/javascript">
$('#CA').css('fill', 'blue');
$('#NY').css('fill', '#ff0000');
</script>
이 포트 SVG로 설계된 클래스가 VML에 이상이 있습니다를? 그런 식으로 당신은 여전히 'HTML5'타입의 솔루션을 가질 수 있습니다. – Patrick
제 답변을보십시오. 정확히 무엇이 필요합니까? –