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

1from svglib.svglib import svg2rlg
2from reportlab.graphics import renderPM
3#1.svglib方法
4pic = svg2rlg('马.svg')
5renderPM.drawToFile(pic,'svglib.png')
转换后的图片如下,其实就是转换了一个格式,内容没有改变。在SVG文件中,整个画布相当于是透明的,只有三个闭环图形,但是svglib()方法会将SVG的透明底色转换成白色:

3.2 cairosvg()




经历了安装Meteor之后,我就掌握了新技能--阅读报错信息。所以接下来从import cairosvg的报错信息开始发现问题:

),在上面的安装截图中就可以看到。

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

GTK2安装界面


1import cairosvg
2#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方法?写解析<path>那一部分的时候无意间又发现svgpathtools也可以解析SVG?结果就是修修补补,写了一周,一不小心又写了10000+字
说实话,写得有一点累,原以为公众号就当工作记录简单写写就行了。但当我真正开始写的时候总是希望自己写得更详细一点,把前因后果,概念结论,代码分析全都包括进去,这就导致每次写的内容都很多,花的时间也很多。不过呢,我最开始写公众号就是因为工作中新东西太多,有些事情做完就完了,根本来不及复盘和总结,所以想利用写公众号来弥补一下,所以说虽然写得有点累,但也算是一直走在学习的路上吧,就是我走得有点慢
我最近又想写新的内容,什么读书笔记?电影笔记?旅行笔记?有句话这样说,你之所以烦恼是因为想得太多而写得太慢,说的就是我了
不管怎样,我终于又写完了一个主题
下一个主题我已经想好了,也是解析XML文件相关,这次是:TTF里都有什么
END
~




