2013-02-28 15 views
9

Występują różne problemy, gdy próbuję otworzyć obrazy EPS lub SVG z PIL.Grafiki PIL i grafiki wektorowe

Otwarcie EPS

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

kończy się:

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 

otwarcie także SVG kończy się IOError: cannot identify image file.

Problem polega na tym, że muszę obsługiwać oba formaty w mojej aplikacji. Konwersja do innych formatów nie jest alternatywą. Pracuję w systemie Windows 7, Python 2.7.2 i PIL 1.1.7.

Przesłałem oba obrazy: EPS i SVG.

+0

PIL nie obsługuje formatu SVG. Format EPS nie jest w pełni obsługiwany. Zobacz http://www.pythonware.com/library/pil/handbook/index.htm. – nymk

+0

Więc czy istnieje jakaś alternatywa dla PIL w świecie Pythona? – floqqi

Odpowiedz

2

Są alternatywy dla PIL, ale alternatywy dla PIL nie są tym, czego potrzebujesz - no biblioteka Wiem o tym, że w przejrzysty sposób otworzy rysunek oparty na wektorach i potraktuje go tak, jak każdy inny obraz, bez otwierania przeglądarki i przechwytywania jej renderowania.

W przypadku SVG istnieje przepis na użycie Kairu - który obsługuje także wiele innych formatów, jeśli jest to nieco trudniejsze w obsłudze niż API PIL - myślę, że cario może również obsługiwać EPS - więc możesz najprawdopodobniej rozwiniesz swoją aplikację z pycairo - lub pycairo + PIL w najgorszym przypadku.

Recepta dla renderowania SVG jest w odpowiedzi na: Convert SVG to PNG in Python

(należy pamiętać, że nie trzeba „przekonwertować plik PNG” - The shos recibe sposób renderowania do powierzchni Kairze, które mogą być wyświetlonym, zapisanym w pliku itd.)

0

Jednak Pillow obsługuje EMF, która jest nadal grafiką wektorową. Natknąłem się na ten wątek, gdy szukałem dogodnego sposobu na konwersję SVG na EMF. Najprościej jest użyć Inkscape do tworzenia EMF z SVG:

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

1

dzień dzisiejszy, że jest lipiec 2017 r czytania i konwertowania plików SVG można łatwo osiągnąć poprzez importowanie cairosvg który zapewnia svg2png Funkcja.

Ponadto svglib rozwój to ponownie, a więc przez importowanie svglib i ReportLab konwersja z SVG PNG powinno być łatwe, jak również. kwestia 2 połączeń.