2013-02-28 16 views
9

Ho riscontrato diversi problemi quando provo ad aprire immagini EPS o SVG con PIL.PIL e grafica basata su vettori

apertura EPS

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

termina 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 

SVG apertura anche termina in IOError: cannot identify image file.

Il problema è che devo supportare entrambi i formati nella mia applicazione. La conversione in altri formati non è un'alternativa. Sono su Windows 7, Python 2.7.2 e PIL 1.1.7.

Ho caricato entrambe le immagini: EPS e SVG.

+0

PIL non supporta il formato SVG. Il formato EPS non è completamente supportato. Vedi http://www.pythonware.com/library/pil/handbook/index.htm. – nymk

+0

Quindi, c'è qualche alternativa a PIL nel mondo Python? – floqqi

risposta

2

Thre sono alternative al PIL, ma le alternative al PIL non sono quello che vuoi - C'è no libreria So che aprirebbe in modo trasparente un disegno basato sul vettore e trattarlo come qualsiasi altra immagine, a meno di aprire un browser Web e catturarne il rendering.

Per quanto riguarda SVG, c'è una ricetta che usa Cairo - che può anche gestire molti altri formati, se un po 'più difficile da gestire rispetto all'API PIL - penso che cario possa anche gestire EPS - quindi, puoi Probabilmente svilupperai la tua app con pycairo - o pycairo + PIL nel peggiore dei casi.

La ricetta per il rendering SVG di è la risposta a: Convert SVG to PNG in Python

(notare che non c'è bisogno di "convertire il file in PNG" - le shos recibe come rendere a una superficie cairo, che può essere visualizzato, salvato in un file e così via)

0

Eppure, il cuscino supporta EMF che è ancora grafica vettoriale. Mi sono imbattuto in questo thread perché stavo cercando un mezzo conveniente per convertire SVG in EMF. La cosa migliore è quella di utilizzare Inkscape per creare campi elettromagnetici da SVG:

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

1

A partire da oggi, vale a dire luglio 2017, la lettura e la conversione di file SVG può essere facilmente realizzata mediante l'importazione di cairosvg che fornisce la svg2png funzione.

Inoltre il svglib sviluppo inizia nuovamente, quindi importando svglib e reportlab, la conversione da SVG in png dovrebbe essere facile pure. una questione di 2 chiamate.