为了将 svg 转换为 png,我可以想到两种方法:
1.这是可以满足您需要的lib:https://cairosvg.org/documentation/
$ pip3 install cairosvg
Run Code Online (Sandbox Code Playgroud)
python3代码:
cairosvg.svg2png(url="/path/to/input.svg", write_to="/tmp/output.png")
Run Code Online (Sandbox Code Playgroud)
已在 Linux(debian 9+ 和 ubuntu 18+)和 MacOS 上使用过它。对于大约 1MB svg 的大文件,它的工作方式与预期相同。例如:世界地图。Lib 还允许导出 pdf 文件。
提示:cairosvg 提供 png 输出图像的放大功能,因为使用矢量图形 svg 后默认大小看起来很模糊:)。我无法让 DPI 选项为我工作。
2. 还有另一种方法可以完成相同的操作,即使用浏览器打开 svg 文件并使用 Selenium webdriver 与 Firefox 或其他浏览器进行屏幕截图。您可以将屏幕截图保存为 png。
可以使用 Pillow 将 png 转换为 jpeg:Convert png to jpeg using Pillow
pyvips支持 SVG 加载。它免费、快速、需要很少的内存,并且适用于 macOS、Windows 和 Linux。
你可以这样使用它:
import pyvips
image = pyvips.Image.new_from_file("something.svg", dpi=300)
image.write_to_file("x.png")
Run Code Online (Sandbox Code Playgroud)
默认 DPI 为 72,这可能有点低,但您可以设置任何您喜欢的 DPI。您可以以明显的方式写入 JPG。
您还可以按您想要的像素尺寸加载,如下所示:
import pyvips
image = pyvips.Image.thumbnail("something.svg", 200, height=300)
image.write_to_file("x.png")
Run Code Online (Sandbox Code Playgroud)
这将使 SVG 适合 200 x 300 像素的框。本文档介绍的所有选项。
pyvips SVG 加载器有一些不错的属性:
从字符串渲染可能很方便,例如:
import pyvips
x = pyvips.Image.svgload_buffer(b"""
<svg viewBox="0 0 200 200">
<circle r="100" cx="100" cy="100" fill="#900"/>
</svg>
""")
x.write_to_file("x.png")
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,尝试导入 pyvips 时会出现 libgobject-2.0-0.dll、libvips-42.dll 等未找到的错误。要让 pyvips 在 Windows 上运行,请执行以下操作:
在代码中这样做:
import os
# The bin folder has the DLLs
os.environ['path'] += r';C:\Path\ToYour\VIPsFolder\bin'
import pyvips
image = pyvips.Image.thumbnail("test.svg", 200)
image.write_to_file("test.png")
Run Code Online (Sandbox Code Playgroud)
我建议使用 pyvips 而不是 cairosvg。根据我的测试,它比 cairosvg 快得多,特别是对于大型 SVG。无论如何,你需要类似于上面的东西才能让 cairosvg 在 Windows 上工作。
| 归档时间: |
|
| 查看次数: |
10660 次 |
| 最近记录: |