SVG笔记(二):Python如何将SVG转换为PNG? 您所在的位置:网站首页 svg批量转成png SVG笔记(二):Python如何将SVG转换为PNG?

SVG笔记(二):Python如何将SVG转换为PNG?

2023-10-05 18:57| 来源: 网络整理| 查看: 265

上一篇文章使用4种方法解析了SVG文件并对图形进行了复现,这一篇主要讲如何使用Python将SVG转换为PNG文件,也就是矢量图和位图的转换。

本文需要用到两个Python库:svglib和cairosvg,svglib要求Python>=3,cairosvg要求安装GTK+环境和Python>=3.6。

3. SVG转换为PNG3.1 svglib()第一种方法比较简单,直接pip就可以成功安装库。有关这个方法的具体内容可以去这个网址查看:https://pypi.org/project/svglib/

pip安装svglib使用这个方法转换SVG文件格式到PNG也很简单:

1from svglib.svglib import svg2rlg2from reportlab.graphics import renderPM3#1.svglib方法4pic = svg2rlg('马.svg')5renderPM.drawToFile(pic,'svglib.png')

转换后的图片如下,其实就是转换了一个格式,内容没有改变。在SVG文件中,整个画布相当于是透明的,只有三个闭环图形,但是svglib()方法会将SVG的透明底色转换成白色:

马.png3.2 cairosvg()先贴两个网址,一个是pypi官网cairosvg库的说明和介绍:https://pypi.org/project/CairoSVG/ ,另一个是 cairosvg的官网链接,里面有GitHub链接和文档说明 :https://www.courtbouillon.org/cairosvg  首先还是使用pip安装cairosvg库:pip安装cairosvg到这里还是很简单的,但是这个库并不是安装后了就可以直接用载入cairosvg失败从上图的报错信息中可以发现,载入包出现错误是因为没有安装cairo、libcairo-2这两个库,但如果使用pip安装这些库,就可以发现这两个并不是Python库:安装cairo和libcairo-2失败为什么找不到这两个库?因为问题不出在这里经历了安装Meteor之后,我就掌握了新技能--阅读报错信息。所以接下来从import cairosvg的报错信息开始发现问题:载入cairosvg报错--第一行 第一行:cairosvg文件夹中__init__.py文件第26行from . import surface,这里的surface是cairosvg文件夹中的surface.py文件。载入cairosvg报错--第二行 第二行:cairosvg文件夹中surface.py文件第9行import cairocffi as cairo,cairocffi是pip在安装cairosvg时安装的一个requirement库(可以理解为cairosvg运行必须的库),在上面的安装截图中就可以看到。载入cairosvg报错--第二行第三行:进入cairocffi文件夹下运行__init__.py文件,运行到第50行的时候,出现了报错,其实就是运行dlopen这个函数的时候出现错误。我们找到dlopen函数,发现函数如果要运行成功,需要找到libcairo-so.2,libcairo.2.dylib和libcairo-2.dll三个文件中的一个。在函数简介中可以看到,这三个文件只是在不同平台上不同名字的同一个库。dlopen函数这三个文件中的libcairo-2.dll文件可以在GTK+库中找到,贴一个GTK+的GitHub网址链接:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer。

简单介绍一下GTK+,GTK+(GIMP Toolkit)是一套在GIMP基础上发展而来的一种跨平台的图形工具包,它可以很方便地制作图形用户界面(Graphical User Interface,GUI)。GTK+使用C语言编写,目前已经绑定了很多的流行语言,如PHP,Python等。具体展开来说的话内容就太多了,在这里只要知道GTK+是一种图形工具包就可以了。这并不是一个Python库,所以需要单独安装。

GTK+ GitHub界面

在GitHub页面点击红框中的链接就可以下载GTK2和GTK3库,这两个库都是基于Windows-64bit环境的。关于GTK2和GTK3,个人感觉在使用cairosvg的时候没有太大区别,两个库中都有libcairo-2.dll文件:GTK2和GTK3对比下载成功后的GTK2或GTK3是exe文件,点击安装然后一路Next就可以,在下面的安装页面中设置将PATH路径添加到系统环境变量之中:GTK2安装界面安装完成后,可以在系统变量中查看GTK的路径是否已经添加成功,下图我将GTK2安装在了D盘下:GTK2路径已经被添加进了系统变量之中完成上面的步骤就可以成功载入cairosvg库了,为了更清晰地展示调用库的过程,我在dlopen函数中添加了5个打印函数,打印出每一步的结果:在dlopen函数中增加5个打印函数接下来import cairosvg查看一下:打印出dlopen的每一步‍从上图可以看到,系统先搜索cairo库对应的文件,结果没有找到,所以filename这里打印出来的是None。接下来搜索libcairo-2库对应的文件,在我们安装的GTK+文件夹下找到了libcairo-2.dll文件,所以cairosvg成功被载入了。cairosvg转换图片格式的代码只需要一行,也非常简单:1import cairosvg2#2.cairosvg方法3cairosvg.svg2png(file_obj=open('马.svg'), write_to='cairosvg.png')

不过和svglib不同的是,cairosvg不会将透明底色转换成白色,它将SVG转换成了PNG图片之后,图片底色仍旧是透明的。

3.3 方法对比

svglib方法安装简单,不过会将SVG文件透明的底色转换成为白色。

cairosvg方法需要安装GTK+库并配置环境,转换成功的PNG图片更贴近原SVG,因为它不会对透明的地方进行另外的处理。

来看一下两种方法生成的图片对比,背景是我的电脑桌面可以看到左边图片的背景是透明的,右边的图片背景色被填充成了白色。

两种方法生成的PNG图片对比

写在最后

这一篇比较短,方法也比较简单,同样是安装环境,这一次我就淡定了许多,可能因为写过Meteor那样的大长篇之后觉得配置环境什么的都不是事儿了吧

我之前解析SVG的时候只用了DOM方法,ElementTree只是简单试了一下,但在写第一篇的时候发现居然还有一种SAX方法?写解析那一部分的时候无意间又发现svgpathtools也可以解析SVG?结果就是修修补补,写了一周,一不小心又写了10000+字

说实话,写得有一点累,原以为公众号就当工作记录简单写写就行了。但当我真正开始写的时候总是希望自己写得更详细一点,把前因后果,概念结论,代码分析全都包括进去,这就导致每次写的内容都很多,花的时间也很多。不过呢,我最开始写公众号就是因为工作中新东西太多,有些事情做完就完了,根本来不及复盘和总结,所以想利用写公众号来弥补一下,所以说虽然写得有点累,但也算是一直走在学习的路上吧,就是我走得有点慢

我最近又想写新的内容,什么读书笔记?电影笔记?旅行笔记?有句话这样说,你之所以烦恼是因为想得太多而写得太慢,说的就是我了不管怎样,我终于又写完了一个主题下一个主题我已经想好了,也是解析XML文件相关,这次是:TTF里都有什么

~END~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有