我正在使用svgwrite
并生成svg文件,如何将它们转换为PNG或JPEG?
答案 0 :(得分:3)
要将svg转换为png,我可以想到2种方法:
1。 这是可以满足您需要的lib:https://cairosvg.org/documentation/
$ pip3 install cairosvg
python3代码:
cairosvg.svg2png(url="/path/to/input.svg", write_to="/tmp/output.png")
已在Linux(debian 9+和ubuntu 18+)和MacOS上使用它。对于大约1MB svg的大文件,它可以正常工作。例如:世界地图。库也允许导出pdf文件。
提示:cairosvg提供按比例缩放png输出图像的功能,因为使用矢量图形svg :)后默认大小看起来很模糊。我无法使用DPI选项。2。 还有另一种方法,可以通过使用浏览器打开svg文件并使用Firefox或其他浏览器使用Selenium Webdriver截屏来完成。您可以将屏幕截图另存为png。
一个人可以使用Pillow将png转换为jpeg:Convert png to jpeg using Pillow
答案 1 :(得分:2)
pyvips支持SVG加载。它是免费,快速,几乎不需要内存的,并且可以在macOS,Windows和Linux上运行。
您可以像这样使用它:
CoroutineScope
默认DPI为72,可能会有点低,但是您可以设置任何您喜欢的DPI。您可以用明显的方式来写JPG。
您还可以像这样按像素尺寸加载:
import pyvips
image = pyvips.Image.new_from_file("something.svg", dpi=300)
image.write_to_file("x.png")
这将使SVG适应200 x 300像素的框。 docs introduce all the options。
pyvips SVG加载程序具有一些不错的属性:
答案 2 :(得分:1)
我查看了几种方法,包括cairo(在Windows上无法运行),svglib + reportlab(无法更改dpi),甚至是inkscape(从命令行)。
最后,这是我发现的最佳方法。我在python 3.7上进行了测试。
def convert(method, svg_file, png_file, resolution = 72):
from wand.api import library
import wand.color
import wand.image
with open(svg_file, "r") as svg_file:
with wand.image.Image() as image:
with wand.color.Color('transparent') as background_color:
library.MagickSetBackgroundColor(image.wand,
background_color.resource)
svg_blob = svg_file.read().encode('utf-8')
image.read(blob=svg_blob, resolution = resolution)
png_image = image.make_blob("png32")
with open(png_file, "wb") as out:
out.write(png_image)
我必须先安装wand软件包(使用pip),然后再安装ImageMagick for Windows(http://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows)。
答案 3 :(得分:0)
在 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")
我推荐使用 pyvips 而不是 cairosvg。从我的测试来看,它比 cairosvg 快得多,尤其是对于大型 SVG。无论如何,您需要类似于上述内容才能让 cairosvg 在 Windows 上运行。