[python] CairoSVG使用教程

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 参考

posted @ 2022-12-18 21:10  落痕的寒假  阅读(406)  评论(0编辑  收藏  举报