首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中将SVG转换为PNG或JPEG?

如何在Python中将SVG转换为PNG或JPEG?
EN

Stack Overflow用户
提问于 2018-07-20 20:45:02
回答 4查看 16.7K关注 0票数 15

我正在使用svgwrite并生成svg-文件,如何将它们转换为PNG或JPEG?

EN

回答 4

Stack Overflow用户

发布于 2020-07-13 13:13:50

比维普斯支持SVG负载。它是免费的,快速的,几乎不需要内存,并且工作在macOS,Windows和Linux上。

你可以这样使用它:

代码语言:javascript
运行
复制
import pyvips

image = pyvips.Image.new_from_file("something.svg", dpi=300)
image.write_to_file("x.png")

默认DPI为72,这可能有点低,但您可以设置任何您喜欢的DPI。您可以用显而易见的方式写信给JPG。

还可以按所需像素大小加载如下所示:

代码语言:javascript
运行
复制
import pyvips

image = pyvips.Image.thumbnail("something.svg", 200, height=300)
image.write_to_file("x.png")

这将使SVG适合在200x300像素框内。docs介绍了所有选项

pyvips SVG加载程序有一些很好的特性:

  • 它使用图书馆员的实际渲染,因此PNG将有高质量的抗锯齿边缘.
  • 它比ImageMagick这样的系统要快得多,后者只是向inkscape提供渲染功能。
  • 支持渐进式渲染。大的图像(超过几千像素的一面)被呈现在部分,保持内存的使用在控制之下,即使是非常大的图像。
  • 它支持流,所以您可以直接将SVG呈现到一个巨大的深度缩放金字塔(例如),而不需要任何中间存储。
  • 它支持来自内存区域、字符串和管道以及文件的输入。

从字符串进行渲染是很方便的,例如:

代码语言:javascript
运行
复制
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")
票数 11
EN

Stack Overflow用户

发布于 2020-05-22 08:01:58

对于将svg转换为png,我可以想到两种方法:

  1. 下面是库,它可以满足您的需要:https://cairosvg.org/documentation/
代码语言:javascript
运行
复制
$ pip3 install cairosvg

python3代码:

代码语言:javascript
运行
复制
cairosvg.svg2png(url="/path/to/input.svg", write_to="/tmp/output.png")

已经在linux (debian 9+和ubuntu 18+)和MacOS上使用过。对于大约1MB svg的大型文件来说,它的工作原理是一样的。例子:世界地图。Lib还允许导出pdf文件。

提示: cairosvg提供png输出图像的缩放,因为在使用矢量图形svg :之后,默认大小看起来很模糊。我无法让DPI选项对我起作用。

  1. 还有另一种方法可以通过使用浏览器打开svg文件并使用Selenium与Firefox或其他浏览器一起拍摄屏幕快照来做到这一点。你可以将截图保存为png。

可以使用枕头将png转换为jpeg:使用枕头将png转换为jpeg

票数 6
EN

Stack Overflow用户

发布于 2021-05-07 04:32:31

在Windows上,在试图导入pyvip时没有找到libgobject-2.0-0.dll、libvip-42.dll等错误。要让pyvips在Windows上工作,请执行以下操作:

在代码中这样做:

代码语言:javascript
运行
复制
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")

我建议你用吡咯烷酮来代替它。从我的测试来看,它比cairosvg快得多,特别是对于大型SVG。无论如何,要让cairosvg在Windows上工作,您需要类似于上面的内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51450134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档