[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 參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章