php实现svg转化png的方法:首先通过“drawInlineSVG”方法将svg转为canvas;然后使用“base64_image_c^ ` [ 7 I X Vontent”方法将canvas转为png即可。
推荐:《PHP视频o _ ! &教程》
svg转png实现
1.php imagick扩展插件
a.研究imagick插件方法
$M 4 $ / U M $im = new Imagick($upload% _ c * u g C J_path . $file_name);
$svg = file_get_contents($upload_path . $file_name);
$svg =O M 8 3 ? 3 '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;
$im->readImageBlob($svg);
// png settings
$im->setIm4 t 2 S U BageFormat("png24");
$srcImage = $im->getImageGeometry(); //获取源图片宽和高W a } 8 #
$im->resizeImage($srcImage['width'], $srcImaq ! V 5 ~ 2 6ge['heiE w V H ,ght'], imagick::FILTER_LA` J FNCZOS, 1, false);
$im-&g* 0 G h } 2 = U Qt;writeImage($upload_path.'/'.$top[ s [ F + ~ , 3ng_name.'.png');
$im->clear();
$im->destroy();
b.遇A & c到的B * o Q + O问题# 9 @ { ?
svg图片可以成功转化为png格式% P j Y p @ K -图片,但png图片存在问题:
1)线段丢失;
2)字体不展示;
3)svg文件中styp 0 ,le标签样式不能解析;
2.弃用imagick插件,改为svg转canvas转png@ ` Q A
a.svg转canvas
function drawInlineSVG($svg, callback) {
var svg = $svg;
var parser = n! * wew DOMParser();
var doc = parser.parseFromString(svg, "text/xml");
svg = doc.getElementsByTa. E V [ - 1gName('svg');
svg = svg[g ; a & R + M0];
svg.innerHTML = '' + svg.innerHTML;
var svgData = nec # @ L . P lw XMLSerializer().serializeToString( svg );
var img = documeP X W : e - N e hnt.createElement( "img" );
img.setAttribute( "src", "data:image/svg+xml;base64," + btoa( unescape(encodeURIComponenY U 5 Lt(svgData)) ) );
img.onload4 u o + # = function () {
var canvas = document.createElement( "canvas" );
canvas.width = img.widI O *th;
canvas.height = im n 7 K G Gmg.height;
var ctx = canvas.getContext( "2d8 s s 1 k , V 7" ); //取得画布的2d绘图上下文
ctx8 8 @ @ ~ 5 }.drawImage( img, 0, 0 );
canvas.toDataURL( "image/png" );
var base64Src = canvas.toDataUT G ERL( "image/png" );
callback && calle w # 8 5 e r q Gback(base64Src); // 调用回掉函数
};
return;
}
b.canvas转png(I l & V u 2 nbase64Src转化为png)
/* base64格f E ] $ $ - %式编码转换为图片并保存对应文件夹 */
function base64_image_content($base64_im/ M ? H F -age_content,$pa k U ( A # [ )ath, $file_name = ''){
//匹配出图片的格式
if (preg_m& M p Zatch('/^(data:\s*image$ b U T * d/(\w+);base6, P ` * D & X R4,)/', $- $ r n c Q 9 q Ebase64_image_content, $result)){
if(!file_exists($path)){
// 路径不存在
ra w 7 z Yeturd V ; M z Q ?n false;
}
$new_file = $path . $file_name;
if (file_put_contents($new_file, base64_decode(str_replace($resul# r d [ ? c 0t[1], K + _ u Q } 8 Z'', $base64_image_content)))){
return '/'.$new_file;
}else{
return false;
}
}else{
return false;
}
}
c.效果示例
1)svg格式
2)png格式
以上就是php如何实现svg( = G E G J P } (转化pl 8 X c Mng的详细内容。