PIL and vectorbased graphics


Question

I run into several problems when I try to open EPS- or SVG-Images with PIL.

Opening EPS

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

ends in:

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

Also opening SVG ends in IOError: cannot identify image file.

The problem is I have to support both formats in my application. Converting to other formats is no alternative. I'm on Windows 7, Python 2.7.2 and PIL 1.1.7.

I uploaded both images: EPS and SVG.

1
11
2/28/2013 8:21:08 AM

There are alternatives to PIL, but alternatives to PIL are not what you want - There is no library I know of that would transparently open a vector based drawing and treat it just as any other image, short of opening a web browser and grabbing its render.

For dealing with SVG, there is a recipe using Cairo - which also can handle a lot of other formats, if a bit more difficult to deal with than the PIL API - I think Cairo can also handle EPS - so, you can probably develop your app with pycairo - or pycairo + PIL in the worst case.

The recipe for rendering SVG's is in the answer to: Convert SVG to PNG in Python

(note that you don't have to "convert the file to PNG" - the recibe shows how you render to a cairo surface, which can be displayed, saved to a file, and so on)

4
9/25/2018 12:41:38 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon