2013-02-28 8 views
9

जब मैं ईआईपी- या एसवीजी-छवियों को पीआईएल के साथ खोलने की कोशिश करता हूं तो कई समस्याओं में भाग लेता हूं।पीआईएल और वेक्टरबेस ग्राफिक्स

उद्घाटन 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 

इसके अलावा खोलने एसवीजी IOError: cannot identify image file में समाप्त होता है।

समस्या यह है कि मुझे अपने आवेदन में दोनों प्रारूपों का समर्थन करना है। अन्य प्रारूपों में कनवर्ट करना कोई विकल्प नहीं है। मैं विंडोज 7, पायथन 2.7.2 और पीआईएल 1.1.7 पर हूं।

मैंने दोनों छवियों को अपलोड किया: EPS और SVG

+0

पीआईएल एसवीजी प्रारूप का समर्थन नहीं करता है। ईपीएस प्रारूप पूरी तरह से समर्थित नहीं है। Http://www.pythonware.com/library/pil/handbook/index.htm देखें। – nymk

+0

तो, क्या अजगर दुनिया में पीआईएल का कोई विकल्प है? – floqqi

उत्तर

1

PILsvg का समर्थन नहीं करता है, लेकिन आप svglib की कोशिश कर सकते हैं जो, संयुक्त राष्ट्र सौभाग्य से, करता नहीं सक्रिय विकास के अंतर्गत होने लगते हैं:

+1

सौभाग्य से, svglib विकास अब फिर से लगता है। वर्तमान में पीपीपीआई में संस्करण 0.8.1 पायथन 2.7 और 3.5 का समर्थन करता है। –

2

थ्रे पीआईएल के विकल्प हैं, लेकिन पीआईएल के विकल्प आप जो चाहते हैं वह नहीं हैं - वहां है नहीं लाइब्रेरी मुझे पता है कि पारदर्शी रूप से एक वेक्टर आधारित ड्राइंग खोल देगा और इसे किसी भी अन्य छवि के रूप में, वेब ब्राउज़र खोलने और इसके प्रस्तुत करने को पकड़ने के समान ही व्यवहार करेगा।

एसवीजी से निपटने के लिए, काइरो का उपयोग करके एक नुस्खा है - जो कि अन्य प्रारूपों को भी संभाल सकता है, अगर पीआईएल एपीआई से निपटने में थोड़ा मुश्किल हो - मुझे लगता है कि कैरियो ईपीएस को भी संभाल सकता है - तो, ​​आप कर सकते हैं शायद सबसे खराब मामले में pycairo - या pycairo + पीआईएल के साथ अपने ऐप विकसित करें।

प्रतिपादन के लिए एसवीजी का नुस्खा के जवाब में है: Convert SVG to PNG in Python

(ध्यान रखें कि "पीएनजी के लिए फ़ाइल बदलने" की जरूरत नहीं है - तुम कैसे एक काहिरा की सतह के लिए प्रस्तुत करना है, जो कर सकते हैं recibe shos प्रदर्शित किया जा सकता है, एक फ़ाइल में सहेजा जा सकता है, और इसी तरह)

0

फिर भी, तकिया ईएमएफ का समर्थन करता है जो अभी भी वेक्टर ग्राफिक्स है। मैं इस थ्रेड पर ठोकर खाई क्योंकि मैं एसवीजी को ईएमएफ में परिवर्तित करने के लिए सुविधाजनक माध्यम खोज रहा था। आपका सबसे अच्छा शर्त एसवीजी से ईएमएफ बनाने के लिए इंकस्केप उपयोग करने के लिए है:

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

1

आज के रूप में, कि जुलाई 2017 है, पढ़ने और SVG फ़ाइलें परिवर्तित आसानी से cairosvg कि प्रदान करता है आयात द्वारा पूरा किया जा सकता svg2png फ़ंक्शन।

इसके अलावा svglib विकास, फिर से पर है इस प्रकार svglib और reportlab आयात करके, png को svg से रूपांतरण के रूप में अच्छी तरह से आसान होना चाहिए। 2 कॉल का मामला