gpt4 book ai didi

php 实现svg转化png格式的方法分析

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章php 实现svg转化png格式的方法分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了php 实现svg转化png格式的方法。分享给大家供大家参考,具体如下:

svg转png实现

1.php imagick扩展插件

a.研究imagick插件方法 。

?
1
2
3
4
5
6
7
8
9
10
11
$im = new Imagick( $upload_path . $file_name );
$svg = file_get_contents ( $upload_path . $file_name );
$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $svg ;
$im ->readImageBlob( $svg );
// png settings
$im ->setImageFormat( "png24" );
$srcImage = $im ->getImageGeometry(); //获取源图片宽和高
$im ->resizeImage( $srcImage [ 'width' ], $srcImage [ 'height' ], imagick::FILTER_LANCZOS, 1, false);
$im ->writeImage( $upload_path . '/' . $topng_name . '.png' );
$im ->clear();
$im ->destroy();

b.遇到的问题 。

svg图片可以成功转化为png格式图片,但png图片存在问题:

1)线段丢失; 。

2)字体不展示; 。

3)svg文件中style标签样式不能解析; 。

2.弃用imagick插件,改为svg转canvas转png

a.svg转canvas 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function drawInlineSVG( $svg , callback) {
   var svg = $svg ;
   var parser = new DOMParser();
   var doc = parser.parseFromString(svg, "text/xml" );
   svg = doc.getElementsByTagName( 'svg' );
   svg = svg[0];
   svg.innerHTML = '<rect width="100%" height="100%" fill="#ffffff"></rect>' + svg.innerHTML;
   var svgData = new XMLSerializer().serializeToString( svg );
   var img = document.createElement( "img" );
   img.setAttribute( "src" , "data:image/svg+xml;base64," + btoa( unescape(encodeURIComponent(svgData)) ) );
   img.onload = function () {
     var canvas = document.createElement( "canvas" );
     canvas.width = img.width;
     canvas.height = img.height;
     var ctx = canvas.getContext( "2d" ); //取得画布的2d绘图上下文
     ctx.drawImage( img, 0, 0 );
     canvas.toDataURL( "image/png" );
     var base64Src = canvas.toDataURL( "image/png" );
     callback && callback(base64Src); // 调用回掉函数
   };
  return ;
}

b.canvas转png(base64Src转化为png) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* base64格式编码转换为图片并保存对应文件夹 */
function base64_image_content( $base64_image_content , $path , $file_name = '' ){
   //匹配出图片的格式
   if (preg_match( '/^(data:\s*image\/(\w+);base64,)/' , $base64_image_content , $result )){
     if (! file_exists ( $path )){
       // 路径不存在
      return false;
     }
     $new_file = $path . $file_name ;
     if ( file_put_contents ( $new_file , base64_decode ( str_replace ( $result [1], '' , $base64_image_content )))){
       return '/' . $new_file ;
     } else {
       return false;
     }
   } else {
     return false;
   }
}

c.效果示例 。

1)svg格式 。

php 实现svg转化png格式的方法分析

2)png格式 。

php 实现svg转化png格式的方法分析

希望本文所述对大家PHP程序设计有所帮助.

原文链接:https://blog.csdn.net/a408492801/article/details/98954220 。

最后此篇关于php 实现svg转化png格式的方法分析的文章就讲到这里了,如果你想了解更多关于php 实现svg转化png格式的方法分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com