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. LeetCode------两数之和(3)【数组】

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 ...

  2. 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

    ​ 参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...

  3. JS数据结构与算法-概述

    JS数据结构与算法概述 数据结构: 计算机存储, 组织数据的方式, 就像锅碗瓢盆 算法: 一系列解决问题的清晰指令, 就像食谱 两者关系: 程序 = 数据结构 + 算法 邂逅数据结构与算法 什么是数据 ...

  4. jmeter时间戳

    时间戳这东西,在jmeter中会经常用到,自己又总是记不住,做个记录. jmeter自带的时间戳函数: ① ${__time(yyyy-MM-dd,)}  ,对应时间示例:2022-09-24 ② $ ...

  5. 2022春每日一题:Day 34

    题目:lowbit求和 (没有找到哪个公开题库有这个题) 题意:求数组中任意一对数的异或和的lowbit的总和. 对于异或,二进制位中两个数相等则为0,反之为1,而且此题是要求lowbit,那我们利用 ...

  6. Go语言核心36讲18

    你很棒,已经学完了关于Go语言数据类型的全部内容.我相信你不但已经知晓了怎样高效地使用Go语言内建的那些数据类型,还明白了怎样正确地创造自己的数据类型. 对于Go语言的编程知识,你确实已经知道了不少了 ...

  7. Java开发学习(四十二)----MyBatisPlus查询语句之条件查询

    一.条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合. 这个我们在前面都有见过,比如查询所有和分页查询的时候,都有看到过一个Wrapper类, ...

  8. MySQL JDBC驱动版本与数据库版本的对应关系及注意事项

    MySQL JDBC驱动版本与数据库版本的对应关系及注意事项 事情发生 学了三遍的servlet,经典老师又教的第一万遍登陆注册,并且让实现,并且让演示,我们老师可能和之前的小学期公司老师 完全没有沟 ...

  9. pagehelper踩坑记之分页乱套

    我们在使用数据库进行查询时,很多时候会用到分页展示功能,因此除了像mybatis这样的完善的orm框架之外,还有pagehelper这样的插件帮助减轻我们的工作. pagehelper的实现方式是,不 ...

  10. Excel2010工作簿被锁定,无法复制或者新增加sheet表格。

    Sub 工作簿密码破解() ActiveWorkbook.Sheets.Copy For Each sh In ActiveWorkbook.Sheets sh.Visible = True Next ...