2013-02-28 3 views
9

У меня возникли проблемы при попытке открыть EPS- или SVG-изображения с помощью PIL.PIL и векторная графика

Открытие 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.

Я загрузил оба изображения: EPS и SVG.

+0

PIL не поддерживает формат SVG. Формат EPS не поддерживается полностью. См. Http://www.pythonware.com/library/pil/handbook/index.htm. – nymk

+0

Итак, есть ли альтернатива PIL в мире python? – floqqi

ответ

1

PIL не поддерживает svg, но вы можете попробовать svglib, которые ООН к счастью, не не, как представляется, в стадии активного развития:

+1

К счастью, разработка svglib, похоже, снова вернулась. Версия 0.8.1, находящаяся в настоящее время в PyPI, поддерживает Python 2.7 и 3.5. –

2

Thre - альтернативы PIL, но альтернативы PIL - это не то, что вы хотите - есть no библиотека. Я знаю, что будет прозрачно открывать векторный рисунок и рассматривать его так же, как и любое другое изображение, не открывая веб-браузер и не захватывая его рендеринг.

Для работы с SVG существует рецепт использования Cairo - который также может обрабатывать много других форматов, если немного сложнее иметь дело с API PIL - я думаю, что cario также может обрабатывать EPS - так что вы можете вероятно, разработайте приложение с pycairo - или pycairo + PIL в худшем случае.

Рецепт для рендеринга SVG находится в ответ на: Convert SVG to PNG in Python

(обратите внимание, что вы не должны «преобразовать файл в формат PNG» - в recibe ШОС, как вы оказываете на поверхность каира, которая может отображаться, сохраняться в файле и т. д.)

0

Тем не менее, подушка поддерживает ЭМП, которая является еще векторной графикой. Я наткнулся на эту тему, поскольку я искал удобное средство для преобразования SVG в EMF в любом случае. Лучше всего использовать Inkscape для создания EMF из SVG:

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

1

На сегодняшний день, то есть июль 2017, чтение и преобразование SVG файлов может быть легко достигнуто за счет импорта cairosvg, что обеспечивает svg2png функция.

Кроме того svglib развитие снова, таким образом, за счет импорта svglib и ReportLab, преобразование из SVG в PNG должен быть легким, а также. речь идет о двух вызовах.