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

 更新时间:2020年01月08日 10:37:50   作者:a408492801  
这篇文章主要介绍了php 实现svg转化png格式的方法,结合实例形式分析了php svg转化png格式相关实现技巧、遇到的问题与操作注意事项,需要的朋友可以参考下

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

svg转png实现

1.php imagick扩展插件

a.研究imagick插件方法

$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

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)

/* 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格式

2)png格式

PS:这里再为大家提供几款比较实用的base64在线编码解码工具供大家使用:

BASE64编码解码工具:
http://tools.jb51.net/transcoding/base64

在线图片转换BASE64工具:
http://tools.jb51.net/transcoding/img2base64

Base64在线编码解码 UTF-8版:
http://tools.jb51.net/tools/base64_decode-utf8.php

Base64在线编码解码 gb2312版:
http://tools.jb51.net/tools/base64_decode-gb2312.php

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《php文件操作总结》、《PHP编码与转码操作技巧汇总》、《PHP中json格式数据操作技巧汇总》、《PHP数组(Array)操作技巧大全》、《PHP运算与运算符用法总结》及《php字符串(string)用法总结

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

相关文章

  • php版微信小店API二次开发及使用示例

    php版微信小店API二次开发及使用示例

    这篇文章主要介绍了php版微信小店API二次开发及使用方法,结合实例形式分析了针对微信小店API的调用及使用方法,需要的朋友可以参考下
    2016-11-11
  • php的一些小问题

    php的一些小问题

    这是我日常使用中的一些问题,经过baidu google大叔们的帮助学会的
    2010-07-07
  • php生成zip压缩文件的方法详解

    php生成zip压缩文件的方法详解

    本篇文章是对php生成zip压缩文件的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP实现支持CURL字符串证书传输的方法

    PHP实现支持CURL字符串证书传输的方法

    这篇文章主要给大家介绍了关于PHP实现支持CURL字符串证书传输的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用php具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • php输出反斜杠的实例方法

    php输出反斜杠的实例方法

    在本篇文章中我们给大家分享的是关于php如何输出反斜杠实例内容以及相关知识点,需要的朋友们学习下。
    2019-09-09
  • 延长phpmyadmin登录时间的方法

    延长phpmyadmin登录时间的方法

    新安装的phpmyadmin默认是cookie模式,如果闲置十几分钟不操作的话,就会要求重新登录。
    2011-02-02
  • PHP 创建标签云函数代码

    PHP 创建标签云函数代码

    PHP创建标签云函数代码,使用此函数创建标签云。
    2010-05-05
  • 9条PHP编程小知识及易犯的小错误

    9条PHP编程小知识及易犯的小错误

    这篇文章主要介绍了9条PHP编程必备知识,本文讲解了变量声明、解析错误、常见的错误、MySQL错误、注意echo和print的区别、注意空字符串('')和NULL的区别、分清==(等于)和===(全等于)的区别等内容,需要的朋友可以参考下
    2015-01-01
  • php简单统计字符串单词数量的方法

    php简单统计字符串单词数量的方法

    这篇文章主要介绍了php简单统计字符串单词数量的方法,涉及php字符串分割与数组统计的相关技巧,需要的朋友可以参考下
    2015-06-06
  • php遍历数组的方法分享

    php遍历数组的方法分享

    php下最灵活的东西就是数组,很多数据都是通过数组的方式显示,整理下数组的遍历方法
    2012-03-03

最新评论