PIL和基于矢量的图形

时间:2013-02-28 08:21:08

标签: python svg python-imaging-library vector-graphics eps

当我尝试用PIL打开EPS-或SVG-Images时,我遇到了几个问题。

开启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 个答案:

答案 0 :(得分:3)

PIL有其他选择,但PIL的替代品并不是你想要的 - 没有 库我知道这会透明地打开一个基于矢量的绘图,并像对待任何其他图像一样处理它,而不是打开一个Web浏览器并抓住它的渲染。

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

渲染SVG的方法是:Convert SVG to PNG in Python

的答案

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

答案 1 :(得分:2)

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

此外, svglib 开发再次开启,因此通过导入svglib和 reportlab ,从svg到png的转换也应该很容易。两个电话。

答案 2 :(得分:1)

PIL不支持svg,但您可以尝试svglib un 幸运的是,似乎正在积极发展:

答案 3 :(得分:0)

然而,Pillow支持仍然是矢量图形的EMF。我偶然发现了这个线程,因为我正在寻找方便的意思,无论如何都要将SVG转换为EMF。 您最好的选择是使用Inkscape从SVG创建EMF:

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