2015-03-17 5 views
7

के साथ पीएनजी खोलना मैं पीएनजी छवि खोलने के लिए पाइथन में PIL/Pillow का उपयोग करने की कोशिश कर रहा हूं। आपको लगता है कि यह छोटा होगा, लेकिन छवियां दूषित दिखाई दे रही हैं।पीआईएल/पिलो

मैं इसे लोड हो रहा है और दिखा यह, अजगर 3.4 और तकिया 2.7.0 उपयोग करने की कोशिश:

यहाँ एक उदाहरण छवि है

$ python 
Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import PIL.Image 
>>> image = PIL.Image.open(r'C:\Users\Administrator\Dropbox\Desktop\example.png') 
>>> image.show() 
>>> 

क्या मैं प्रदर्शित हो यह है:

क्या किसी को कोई विचार है कि यह क्यों है और इसे कैसे हल किया जाए? (भ्रष्टाचार न केवल तब होता है जब मैं इसे दिखाता हूं, लेकिन जब भी मैं इसे दूसरी छवि में पेस्ट करने की कोशिश करता हूं, तो मेरी मूल आवश्यकता है।)

उत्तर

4

@wiredfool says के रूप में, छवि को दिखाए जाने से पहले आरजीबी में परिवर्तित किया जा रहा है। दुर्भाग्य से इसका मतलब है कि अल्फा चैनल को छोड़ दिया जा रहा है। आप अपना खुद का रूपांतरण करना चाहते हैं जो छवि को सफेद पृष्ठभूमि के साथ मिश्रित करता है।

Image.composite(image, Image.new('RGB', image.size, 'white'), image).show() 

paste के लिए दस्तावेज़ से पता चलता है कि यह रूप में अच्छी तरह अल्फ़ा चैनल पर ध्यान नहीं देता। आपको छवि को दो स्थानों पर, एक स्रोत के लिए और मास्क के लिए एक निर्दिष्ट करने की आवश्यकता है।

base.paste(image, box, image) 
+0

मैंने देखा है कि छवि न केवल '.show()' में दूषित हो गई है, बल्कि जब मैंने इसे 'image.paste' की दूसरी छवि में भी दूषित किया है। यह बिल्कुल वही तरीके से दूषित था। –

+0

@RamRachum यदि आप जिस छवि को चिपका रहे हैं वह मोड 'आरजीबीए' नहीं है तो पेस्ट से पहले इसे 'कन्वर्ट' करें। –

+0

यह चाल है, धन्यवाद! –

3

Image.show() छवि को बीएमपी (विंडोज़ पर) के रूप में लिखता है, फिर खुलता है यह दर्शक के साथ। दुर्भाग्यवश बीएमपी लेखक अल्फा चैनल को संरक्षित नहीं करता है, इसलिए आप छवि के आरजीबी चैनल देख रहे हैं।

+0

मैंने देखा है कि छवि न केवल '.show()' में दूषित हो गई है, बल्कि जब मैंने इसे 'image.paste' में किसी अन्य छवि में दूषित किया है। यह बिल्कुल वही तरीके से दूषित था। –

+0

'Image.paste' में अल्फा के संबंध में एक अजीब एपीआई है। यदि आप एक मुखौटा में गुजरते हैं, तो यह उस छवि का उपयोग करने के लिए उपयोग करेगा जो छवि में चिपकाया गया है। 'Image.alpha_composite' शायद आप जो चाहते हैं। – wiredfool