1 CairoSVG介绍

代码下载地址

CairoSVG是一个将SVG1.1转为PNG,PDF, PS格式的转化。SVG算目前火热的图像文件格式了,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形,但是SVG要专用软件才能编辑打开,通过CairSVG我们就能将SVG格式转换为常用的格式。它为类Unix操作系统(至少Linux和macOS)和Windows提供了命令行界面和Python 3.5+库。它是一个开源软件,具有LGPLv3许可。

CairoSVG用Python编写,基于著名的2D图形库Cairo。它在来自W3C测试套件的 SVG样本上进行了测试。它还依赖tinycss2和 cssselect2来应用CSS,并依赖 defusedxml来检测不安全的SVG文件。嵌入式栅格图像由Pillow处理。

CarioSVG仅支持python3,你可以用pip命令安装,安装代码如下:

pip3 install cairosvg

本文主要使用2.4.2版本,当前版本的CairoSVG至少需要Python 3.5,但不适用于Python2.x。较旧的CairoSVG(1.x)版本可在Python 2.x中使用,但不再受支持。CairoSVG及其依赖项在安装过程中可能需要其他工具,这些工具的名称取决于您使用的操作系统。具体如下:

  • 在Windows上,您必须安装适用于Python和Cairo的Visual C ++编译器
  • 在macOS上,您必须安装cairo和libffi
  • 在Linux上,你必须安装cairo,python3-dev和libffi-dev(名称可能为你的系统版本有所不同)

    如果您不知道如何安装这些工具,则可以按照WeasyPrint安装指南中的简单步骤进行操作:安装WeasyPrint还将安装CairoSVG。

2 CairoSVG的使用

2.1 命令行使用

通过命令行你就可以使用CairoSVG,以下代码能够将当前目录下的image.svg文件转换为image.png文件:

cairosvg image.svg -o image.png

具体CairoSVG命令行参数如下:

cairosvg --help
usage: cairosvg [-h] [-v] [-f {pdf,png,ps,svg}] [-d DPI] [-W WIDTH]
[-H HEIGHT] [-s SCALE] [-u] [--output-width OUTPUT_WIDTH]
[--output-height OUTPUT_HEIGHT] [-o OUTPUT]
input Convert SVG files to other formats positional arguments:
input input filename or URL 文件名或者url链接名 optional arguments:
-h, --help show this help message and exit 帮助
-v, --version show program's version number and exit 版本查看
-f {pdf,png,ps,svg} --format {pdf,png,ps,svg} output format 输出格式
-d DPI, --dpi DPI ratio between 1 inch and 1 pixel 输出图像dpi比率设置 DPI比率介于1英寸和1像素之间
-W WIDTH, --width WIDTH width of the parent container in pixels 输入图像宽
-H HEIGHT, --height HEIGHT height of the parent container in pixels 输入图像高
-s SCALE, --scale SCALE output scaling factor 输出图像缩放比例
-u, --unsafe resolve XML entities and allow very large files 解析XML实体
(WARNING: vulnerable to XXE attacks and various DoS) 但是有安全问题
--output-width OUTPUT_WIDTH desired output width in pixels 期望图像输出宽
--output-height OUTPUT_HEIGHT desired output height in pixels 期望图像输出高
-o OUTPUT, --output OUTPUT output filename 图像输出名

支持的输出格式是pdf,ps,png和svg(默认为 pdf)。默认output为标准输出。如果提供了输出文件名,则会根据扩展名自动选择格式。这些dpi选项设置像素与实际单位(例如,毫米和英寸)之间的比率(如规范中所述)。可以为SVG文件提供宽度和高度选项来设置容器大小。此外,如果-用作文件名,CairoSVG将从标准输入中读取SVG字符串。

2.2 python库使用

CairoSVG为Python 3.5+提供了一个模块。该cairosvg模块提供4个功能:

  • svg转pdf
  • svg转png
  • svg转ps
  • svg2转svg(svg文件切割)

这些函数需要以下命名参数之一:

  • url,URL或文件名
  • file_obj,类似文件的对象
  • bytestring,一个包含SVG的字节字符串

他们还可以接收与命令行选项相对应的这些可选参数:

  • parent_width
  • parent_height
  • dpi
  • scale
  • unsafe

如果write_to提供了参数(文件名或类似文件的对象),则将输出写入此处。否则,该函数将返回一个字节字符串。例如:

cairosvg.svg2png(url="/path/to/input.svg", write_to="/tmp/output.png")

cairosvg.svg2pdf(file_obj=open("/path/to/input.svg", "rb"), write_to="/tmp/output.pdf")

output = cairosvg.svg2ps(bytestring=open("/path/to/input.svg").read().encode('utf-8'))

使用实例:

# -*- coding: utf-8 -*-

# 导入cairosvg库
import cairosvg # svg转pdf
# file_obj输入文件名 write_to输出文件名
cairosvg.svg2pdf(file_obj=open("image.svg", "rb"), write_to="output.pdf") # svg转png
# file_obj输入文件名 write_to输出文件名 scale输出图像放大倍数
cairosvg.svg2png(file_obj=open("image.svg", "rb"), write_to="d:/output.png",scale=3.0)

3 参考

[python] CairoSVG使用教程的更多相关文章

  1. 用命令访问D:\python学习\wendjia教程\aa.py

    用命令访问D:\python学习\wendjia教程\aa.py d:                                -----------切换到D盘 cd python学习\wend ...

  2. Python小白好教程

    提供一些Python的基础教程. Crossin的编程教师:网址:http://crossincode.com/home/ 廖雪峰的官方网站 网址:http://www.liaoxuefeng.com ...

  3. 七牛云存储Python SDK使用教程 - 上传策略详解

    文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k  ...

  4. Python学习入门教程,字符串函数扩充详解

    因有用户反映,在基础文章对字符串函数的讲解太过少,故写一篇文章详细讲解一下常用字符串函数.本文章是对:程序员带你十天快速入门Python,玩转电脑软件开发(三)中字符串函数的详解与扩充. 如果您想学习 ...

  5. Python基础入门教程

    Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...

  6. 小白必看Python视频基础教程

    Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.Python的火热,也带动了工程师们的就业热.可能你也想通过学习加入这个炙手可热的行业,可以看看Python视频基础教程,小 ...

  7. Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分

    1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...

  8. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

  9. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

随机推荐

  1. AdaBoost:自适应提升算法的原理及其实现

    AdaBoost:通过改变训练样本权重来学习多个弱分类器并线性组合成强分类器的Boosting算法. Boosting方法要解答的两个关键问题:一是在训练过程中如何改变训练样本的权重或者概率分布,二是 ...

  2. oneplus8手机蓝牙连接tws耳机无法双击退出语音助手

    通过蓝牙协议栈我们知道,蓝牙耳机可以通过发送AT指令唤醒或者退出语音助手 唤醒语音助手: AT+BVRA=1 退出语音助手: AT+BVRA=0 但是实际操作中发现双击可以唤醒但再次双击却无法退出语音 ...

  3. day09-2视图和用户权限

    视图和用户权限 1.视图(view) 看一个需求 emp表的列信息很多,有些信息是个人重要信息(比如:sal.comm.mgr.hiredate),如果我们希望某个用户只能查询emp表的empno.e ...

  4. <三>从编译器角度理解C++代码编译和链接原理

    1代码 点击查看代码 **sum.cpp** int gdata=10; int sum(int a,int b){ return a+b; } **main.cpp** extern int gda ...

  5. 编程架构演化史:远古时代,从打孔卡(Punched Card)开始

    回想读书时记录到书本里的打孔纸带编程,到初学编程接触到的C语言高级编程,再到C++.Java面向对象语言产生:从面向过程系统设计 到面向对象系统设计:从三层结构到MVC.MVP.MVVM:从主机到虚拟 ...

  6. iptables入门到精通

    iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架&qu ...

  7. python3使用libpcap库进行抓包及数据处理

    python版本:python 3.9 libpcap版本:1.11.0b7 python libpcap库是底层绑定c语言libpcap库的开发包,旨在提供python应用可访问的unix c li ...

  8. Win环境安装Protobuf 2.0 版本

    转载请注明出处: 安装步骤 下载 protobuf-2.5.0.zip 与 protoc-2.5.0-win32.zip 下载链接 : https://github.com/protocolbuffe ...

  9. Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务

    PostgreSQL 高可用数据库的常见搭建方式主要有两种,逻辑复制和物理复制,上周已经写过了关于在Windows环境搭建PostgreSQL逻辑复制的教程,这周来记录一下 物理复制的搭建方法. 首先 ...

  10. Java线程未捕获异常处理 UncaughtExceptionHandler

    当一个线程在执行过程中抛出了异常,并且没有进行try..catch,那么这个线程就会终止运行.在Thread类中,提供了两个可以设置线程未捕获异常的全局处理器,我们可以在处理器里做一些工作,例如将异常 ...