2009-09-10 15 views
45

मैं पीआईएल पर काम कर रहा हूं और किसी छवि को आकार देने या थंबनेल करते समय छवि गुणवत्ता को समायोजित किया जा सकता है या नहीं। जो मैंने पाया है, वह डिफ़ॉल्ट गुणवत्ता 85 पर सेट है। क्या यह पैरामीटर आकार बदलने के दौरान tweaked किया जा सकता है?पायथन इमेजिंग लाइब्रेरी में एक आकार की छवि की गुणवत्ता को कैसे समायोजित करें?

मैं वर्तमान में निम्नलिखित कोड का उपयोग कर रहा:

image = Image.open(filename) 
image.thumbnail((x, y), img.ANTIALIAS) 

ANTIALIAS पैरामीटर शायद अच्छी गुणवत्ता देता है। मुझे यह जानने की जरूरत है कि क्या हम गुणवत्ता विकल्प पर अधिक बारीकी से प्राप्त कर सकते हैं।

उत्तर

70

जनहित याचिका का उपयोग मैन्युअल resize विधि:

image = image.resize((x, y), Image.ANTIALIAS) # LANCZOS as of Pillow 2.7 

बचाने विधि

quality_val = 90 
image.save(filename, 'JPEG', quality=quality_val) 

इसके बाद देखने के लिए कि वे कैसे यह कर models.py Photologue से के लिए स्रोत पर एक नजर डालें।

+1

धन्यवाद, thats मैं के लिए सिर्फ वास्तव में क्या देख रहा था ... बस एक अतिरिक्त: गुणवत्ता विकल्प एक kwarg है इसलिए इसे गुणवत्ता = गुणवत्ता – bigmac

+0

@bigmac के रूप में पारित किया जाना है - धन्यवाद, संपादित! –

+1

यह भी ध्यान दें कि यदि आपकी मूल तस्वीर 'अनुक्रमित' है, तो ज्यादातर मामलों में यह आउटपुट की गुणवत्ता में वृद्धि करेगा यदि आप '.resize()' को कॉल करने से पहले इसे 'आरजीबी' या' आरजीबीए 'में परिवर्तित करते हैं। गुणवत्ता विकल्प के लिए –

44

एंटीअलियास "85" गुणवत्ता स्तर के अनुरूप नहीं है। एंटीअलियास पैरामीटर थंबनेल विधि को बताता है कि एल्गोरिदम का उपयोग एक आकार से दूसरे आकार में पिक्सल को फिर से बदलने के लिए किया जाता है। उदाहरण के लिए, अगर मैं एक 3x3 छवि है कि इस तरह दिखता है:

2 2 2 
2 0 2 
2 2 2 

और मैं इसे 2x2 आकार परिवर्तन, एक एल्गोरिथ्म मुझे दे सकता है:

2 2 
2 2 

क्योंकि पिक्सल के सबसे पास के 2s कर रहे हैं, जबकि कोई अन्य मुझे दे सकता है:

1 1 
1 1 

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

यदि आप हानिकारक संपीड़न वाले प्रारूप में सहेजते हैं, तो यह गुणवत्ता के स्तर निर्दिष्ट करने की जगह है।

+4

+1, इसे समझाने का शानदार तरीका –

+1

यह एक वास्तविक अच्छी व्याख्या है। चीयर्स ... – bigmac

+0

धन्यवाद सब। खुशी है कि यह उपयोगी था – jcdyer

8

पुनर्विक्रय और संपीड़न को भ्रमित न करें।

सर्वोत्तम गुणवत्ता के लिए आपको दोनों का उपयोग करना होगा। निम्नलिखित कोड देखें:

from PIL import Image 

image = Image.open(filename) 
image.thumbnail((x, y), Image.ANTIALIAS) 
image.save(filename, quality=100) 

इस तरह मैं अपने कार्यक्रमों में बहुत ठीक अंगूठे की है।

+16

"छवि गुणवत्ता, 1 (सबसे खराब) से 9 5 (सर्वश्रेष्ठ) के पैमाने पर। डिफ़ॉल्ट 75 है। 95 से ऊपर के मानों से बचा जाना चाहिए; 100 पूरी तरह से जेपीईजी क्वांटिज़ेशन चरण को अक्षम करता है।" http://www.pythonware.com/library/pil/handbook/format-jpeg.htm –

0

बेहतर गुणवत्ता प्राप्त करने का एक तरीका है दो चरणों में डाउनस्कलिंग करना। उदाहरण के लिए अगर अपनी मूल छवि 1200x1200 है और आप तो पहला कदम पर इन दो आकार के बीच में कहीं करने के लिए यह downscale 64x64 पिक्सल आकार बदलने के लिए की जरूरत है,:

1200x1200 -> 600x600 -> 64x64

+4

यह केवल तभी सच है जब आप खराब डाउनस्कलिंग फ़िल्टर का उपयोग करते हैं। – mattdm

संबंधित मुद्दे