在python中,将SVG转换为PNG有问题。我使用的是Cairosvg,这就是我的代码。
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
有人能帮忙吗,即使你能提出一个更好的方法?
发布于 2022-07-31 06:55:23
你试过使用pyvips
吗?
import pyvips
image = pyvips.Image.new_from_file("something.svg", dpi=300)
image.write_to_file("x.png")
如果您想了解更多信息,请查看这里的答案
发布于 2022-07-31 07:11:50
我猜您可能没有安装GTK。根据GitHub上类似的bug报告的说法,开罗依赖于GTK。一旦我使用已安装GTK,我就可以使用Cairo使用您的代码将SVG转换为PNG。
或者,您也可以尝试SVGLib
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM
drawing = svg2rlg("file.svg")
renderPM.drawToFile(drawing, "file.png", fmt="PNG")
https://stackoverflow.com/questions/73181213
复制相似问题