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)