2013-02-28 37 views
9

Tôi gặp phải một số sự cố khi tôi cố gắng mở EPS- hoặc SVG-Images bằng PIL.PIL và đồ họa vectorbased

Mở EPS

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

kết thúc bằng:

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 

Cũng mở SVG kết thúc bằng IOError: cannot identify image file.

Vấn đề là tôi phải hỗ trợ cả hai định dạng trong ứng dụng của mình. Chuyển đổi sang các định dạng khác không thay thế. Tôi đang sử dụng Windows 7, Python 2.7.2 và PIL 1.1.7.

Tôi đã tải lên cả hai hình ảnh: EPSSVG.

+0

PIL không hỗ trợ định dạng SVG. Định dạng EPS không được hỗ trợ đầy đủ. Xem http://www.pythonware.com/library/pil/handbook/index.htm. – nymk

+0

Vì vậy, có bất kỳ thay thế cho PIL trong thế giới python? – floqqi

Trả lời

2

Thre là lựa chọn thay thế cho PIL, nhưng lựa chọn thay thế cho PIL không phải là những gì bạn muốn - Có không có thư viện tôi biết điều đó sẽ minh bạch mở một bản vẽ dựa trên vector và xử lý nó giống như bất kỳ hình ảnh nào khác, ngắn mở một trình duyệt web và lấy kết xuất của nó.

Để xử lý SVG, có một công thức sử dụng Cairo - cũng có thể xử lý rất nhiều định dạng khác, nếu khó xử lý hơn API PIL - tôi nghĩ cario cũng có thể xử lý EPS - vì vậy, bạn có thể có thể phát triển ứng dụng của bạn với pycairo - hoặc pycairo + PIL trong trường hợp xấu nhất.

Các công thức cho rendering SVG là trong câu trả lời cho: Convert SVG to PNG in Python

(lưu ý rằng bạn không cần phải "chuyển đổi các tập tin để PNG" - các shos recibe cách bạn trả cho một bề mặt cairo, mà có thể được hiển thị, được lưu vào một tệp, v.v.)

0

Tuy nhiên, Pillow hỗ trợ EMF vẫn là đồ họa vector. Tôi stumbled về thread này như tôi đã được tìm kiếm thuận tiện có nghĩa là để chuyển đổi SVG để EMF anyway. Tốt nhất là sử dụng Inkscape tạo EMF từ SVG:

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

1

Tính đến hôm nay, đó là tháng 7 năm 2017, đọc và chuyển đổi file SVG có thể dễ dàng thực hiện bằng cách nhập cairosvg cung cấp các Hàm svg2png.

Hơn nữa svglib phát triển là trên một lần nữa, do đó bằng cách nhập svglib và ReportLab, việc chuyển đổi từ svg để png nên dễ là tốt. một vấn đề của 2 cuộc gọi.