19

当我尝试使用 PIL 打开 EPS 或 SVG 图像时遇到了几个问题。

开幕 EPS

from PIL import Image
test = Image.open('test.eps')

结束于:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\Lib\site-packages\PIL\Image.py", line 1965, in open
    return factory(fp, filename)
  File "C:\Python27\Lib\site-packages\PIL\ImageFile.py", line 91, in __init__
    self._open()
  File "C:\Python27\Lib\site-packages\PIL\EpsImagePlugin.py", line 206, in _open
    raise IOError, "bad EPS header"
  IOError: bad EPS header

同样打开 SVG 以IOError: cannot identify image file.

问题是我必须在我的应用程序中支持这两种格式。转换为其他格式是没有选择的。我在 Windows 7、Python 2.7.2 和 PIL 1.1.7 上。

我上传了两张图片:EPSSVG

4

5 回答 5

10

截至今天,也就是 2017 年 7 月,通过导入提供 svg2png 功能的cairosvg可以轻松完成 SVG 文件的读取和转换。

此外,svglib开发又开始了,因此通过导入 svglib 和reportlab,从 svg 到 png 的转换也应该很容易。2个电话的问题。

于 2017-07-23T07:25:15.027 回答
6

PIL 有替代品,但 PIL 的替代品不是您想要的 - 我所知道的没有库会透明地打开基于矢量的绘图并将其视为任何其他图像,而不是打开 Web 浏览器并抓取它的渲染.

对于处理 SVG,有一个使用 Cairo 的配方 - 如果比 PIL API 更难处理,它也可以处理许多其他格式 - 我认为 Cairo 也可以处理 EPS - 所以,你可以开发你的带有 pycairo 的应用程序 - 或 pycairo + PIL 在最坏的情况下。

渲染 SVG 的秘诀在于:Convert SVG to PNG in Python

(请注意,您不必“将文件转换为 PNG” - 配方显示了如何渲染到 cairo 表面,可以显示、保存到文件等)

于 2013-03-15T18:01:16.063 回答
1

然而,Pillow 支持仍然是矢量图形的 EMF(增强型 Windows 元文件)。我偶然发现了这个线程,因为我正在寻找将 SVG 转换为 EMF 的便捷方法。最好的办法是使用 Inkscape 从 SVG 创建 EMF:

inkscape --file image.svg --export-emf image.emf

于 2017-04-25T14:25:43.320 回答
0

PIL不支持svg,你可以svglib试试联合国幸运的是,确实不是似乎正在积极开发中:

于 2013-03-15T17:26:23.690 回答
0

虽然我相信最佳答案更好,但可以利用 Inkscape 将 SVG 渲染为 PNG 文件。

render_image_command = "inkscape --export-background-opacity=0 --export-width={} --export-type=png --export-filename {} {}"

render_image_command = render_image_command.format(
    image_width_in_pixels,
    path_to_png_image_to_write,
    path_to_svg_image_to_read
)
于 2021-12-08T12:29:06.890 回答