2013-02-28 8 views
9

Beim Versuch, EPS- oder SVG-Bilder mit PIL zu öffnen, stoße ich auf einige Probleme.PIL und vektorbasierte Grafiken

Eröffnung EPS

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

endet 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 

Auch Öffnen SVG in IOError: cannot identify image file endet.

Das Problem ist, dass ich beide Formate in meiner Anwendung unterstützen muss. Das Konvertieren in andere Formate ist keine Alternative. Ich bin auf Windows 7, Python 2.7.2 und PIL 1.1.7.

Ich habe beide Bilder hochgeladen: EPS und SVG.

+0

PIL unterstützt kein SVG-Format. Das EPS-Format wird nicht vollständig unterstützt. Siehe http://www.pythonware.com/library/pil/handbook/index.htm. – nymk

+0

Gibt es also eine Alternative zu PIL in der Python-Welt? – floqqi

Antwort

2

Es gibt Alternativen zu PIL, aber Alternativen zu PIL sind nicht das, was Sie wollen - There is keine Bibliothek, die ich kenne, würde transparent eine vektorbasierte Zeichnung öffnen und sie wie jedes andere Bild behandeln, kurz vor dem Öffnen eines Webbrowsers und dem Ergreifen des Renderings.

Für den Umgang mit SVG gibt es ein Rezept mit Cairo - das auch viele andere Formate verarbeiten kann, wenn es etwas schwieriger zu handhaben ist als die PIL-API - ich denke, dass cario auch mit EPS umgehen kann Wahrscheinlich entwickeln Sie Ihre App im schlimmsten Fall mit pycairo- oder pycairo + PIL.

Das Rezept für das Rendern von SVG ist in der Antwort auf: Convert SVG to PNG in Python

(beachten Sie, dass Sie müssen nicht „um die Datei zu PNG konvertieren“ - die recibe shos, wie auf eine kairo Oberfläche zu übertragen, wo angezeigt werden, in einer Datei gespeichert werden usw.)

0

Noch unterstützt Kissen EMF, die immer noch Vektorgrafiken ist. Ich bin über diesen Thread gestolpert, als ich auf der Suche nach einem bequemen Mittel war, um SVG in EMF zu konvertieren. Ihre beste Wette ist Inkscape zu verwenden EMF von SVG zu erstellen:

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

1

Ab heute, das ist Juli 2017, Lesen und SVG-Dateien konvertieren kann leicht durch den Import von cairosvg erreicht werden, die die bieten svg2png Funktion.

Des Weiteren die svglib Entwicklung wieder auf, so dass durch svglib und reportlab importieren, sollte die Umwandlung von SVG nach PNG und einfach sein. eine Frage von 2 Anrufen.