问题:哪个可重现的过程可以使 Windows Python 用户将 SVG 图像渲染为 PNG?
许多问题/答案(例如Convert SVG to PNG in Python和Server-side SVG to PNG (or some other image format) in python,由于下面解释的原因,它们不重复)解释了如何使用 Python 将 SVG 转换为 PNG .
不幸的是,它们都不能用于 Python + Windows。经过 20 多分钟,以及许多不同的尝试,我仍然无法做到。有关失败尝试的更多详细信息:
cairo在 Windows 上安装并不简单,我们必须使用 Gohlke 的二进制文件在 Windows 上使用 Python 3.7 安装 pycairo:
pip install pycairo-1.20.0-cp37-cp37m-win_amd64.whl
Run Code Online (Sandbox Code Playgroud)
甚至有一次cairo安装,rsvg(从主答案为PNG(或其他图像格式)的Python服务器端SVG,转换SVG至PNG在Python)不适用于Windows:
pip install rsvg # or pyrsvg
> ERROR: No matching distribution found for …Run Code Online (Sandbox Code Playgroud)首先,我注意到有很多相关的问题,但是在尝试了 pyvip 和 cairo 以及其余的一天之后,即使在安装了它们似乎依赖的其他软件之后,它们都对我不起作用。例外是 svglib 和 reportlab,它很接近,但还没有完全达到目标!这是我发现的最好的帖子,可能会对一些人有所帮助。
我的所有源图像都保存在 SVG 文件中。大多数应用商店要求您提供一组具有特定尺寸和质量的 PNG。所以我需要获取一个 SVG 并生成一个宽度为 w、高度为 h 以及特定 dpi 的 PNG。我想在 python 中以编程方式执行此操作。
我编写了一个几乎可以工作的函数,但是缩放和 dpi 以奇怪的方式相互作用。我使用 svglib 将 SVG 转换为 ReportLab 绘图,然后使用 reportlab 操作该绘图。与其他一些选项不同,Windows 上的安装过程很顺利。
pip install svglib
pip install reportlab
Run Code Online (Sandbox Code Playgroud)
代码如下。我检查了上面的库来获取参数,但添加了一些东西来获取特定的大小。
from svglib.svglib import svg2rlg
from reportlab.graphics import renderPM
def svg_to_png(in_path,out_path,fmt="PNG",
scale=None,size=None,scale_x=1,size_x=None,scale_y=1,size_y=None,
dpi=72, bg=0xffffff):
# Convert SVG to ReportLab drawing.
drawing = svg2rlg(in_path)
# Work out scale factors
# Scale over-rides scale_x|y, ditto size
scale_x = scale if …Run Code Online (Sandbox Code Playgroud)