Python使用Cairosvg转换SVG至PNG遇cairo库加载错误求助
SVG转PNG时CairoSVG依赖缺失问题解决及替代方案
问题描述
尝试用CairoSVG将SVG转PNG,代码如下:
from cairosvg import svg2png f = open(f"{filename}.svg") svg2png(bytestring=f.read().encode("utf-8"),write_to=f"{filename}.png") f.close()
运行时出现依赖缺失错误:
Traceback (most recent call last): File "d:\PycharmProjects\QR Code Scanner\main.py", line 1, in <module> import QrUtil File "d:\PycharmProjects\QR Code Scanner\QrUtil.py", line 11, in <module> from cairosvg import svg2png File "D:\PycharmProjects\QR Code Scanner\venv\lib\site-packages\cairosvg\__init__.py", line 26, in <module> from . import surface # noqa isort:skip File "D:\PycharmProjects\QR Code Scanner\venv\lib\site-packages\cairosvg\surface.py", line 9, in <module> import cairocffi as cairo File "D:\PycharmProjects\QR Code Scanner\venv\lib\site-packages\cairocffi\__init__.py", line 48, in <module> cairo = dlopen( File "D:\PycharmProjects\QR Code Scanner\venv\lib\site-packages\cairocffi\__init__.py", line 45, in dlopen raise OSError(error_message) # pragma: no cover OSError: no library called "cairo-2" was found no library called "cairo" was found no library called "libcairo-2" was found cannot load library 'libcairo.so.2': error 0x7e cannot load library 'libcairo.2.dylib': error 0x7e cannot load library 'libcairo-2.dll': error 0x7e
解决CairoSVG依赖问题(Windows环境)
该错误源于系统缺少Cairo图形库,可通过以下两种方式解决:
方法1:安装GTK+运行时
- 下载对应系统位数(32/64位)的GTK+ for Windows运行时安装包
- 安装完成后,将GTK安装目录下的
bin文件夹路径(如C:\Program Files\GTK3-Runtime Win64\bin)添加到系统环境变量PATH - 重启Python解释器或IDE后重新运行代码
方法2:使用预编译wheel包
- 先卸载现有相关包:
pip uninstall cairosvg cairocffi -y - 下载对应Python版本和系统位数的cairocffi预编译wheel包(包含Cairo依赖)
- 安装下载的wheel包:
pip install cairocffi-xxx.whl - 重新安装CairoSVG:
pip install cairosvg
替代SVG转PNG方案
若不想处理Cairo依赖,可选用以下更简便的方案:
方案1:svglib + Pillow
依赖纯Python库,无需额外系统组件:
from svglib.svglib import svg2rlg from reportlab.graphics import renderPM # 读取SVG并转换为PNG drawing = svg2rlg(f"{filename}.svg") renderPM.drawToFile(drawing, f"{filename}.png", fmt="PNG")
安装依赖:
pip install svglib pillow reportlab
方案2:调用Inkscape命令行
若系统已安装Inkscape,可直接调用其命令行工具转换:
import subprocess subprocess.run([ "inkscape", f"{filename}.svg", "--export-type=png", f"--export-filename={filename}.png" ], check=True)
注意:需确保Inkscape的安装路径已加入系统PATH,或在命令中指定完整路径(如"C:\Program Files\Inkscape\bin\inkscape.exe")。
内容的提问来源于stack exchange,提问作者Ironislife 98
相关产品推荐
相关产品推荐

