2009-08-09 12 views
25

मुझे पीआईएल छवि का आकार बदलने के साथ कुछ अजीब समस्या है।पीआईएल Image.resize() चित्र का आकार बदल नहीं रहा

def handle_uploaded_image(i, u): 
    # resize image 
    from PIL import Image 
    img = Image.open(i) 
    if img.mode not in ('L', 'RGB'): 
     img = img.convert('RGB') 

    width, height = img.size 
    if width == height: 
     img.thumbnail(settings.THUMB_SIZE, Image.ANTIALIAS) 
    elif width > height: 
     ratio = floor(width/height) 
     newwidth = ratio * 150 
     newwidthhalf = floor(newwidth/2) 
     img.resize((newwidth, 150), Image.ANTIALIAS) 
     box = 1 
     img.crop((newwidthhalf, 0, 150, 150)) 
    elif height > width: 
     ratio = floor(height/width) 
     newheight = ratio * 150 
     newheighthalf = floor(newheight/2) 
     img.resize((150, newheight), image.ANTIALIAS) 
     box = 1 
     img.crop((0, newheighthalf, 150, 150)) 
    path = '/'.join([settings.MEDIA_ROOT, 'users', u.username, 'mugshotv2.jpg']) 
    img.save(path, format='JPEG') 

इस कोड को किसी भी त्रुटि के बिना चलाता है और मुझे सही फ़ोल्डर में छवि नामित mugshotv2.jpg पैदा करता है, लेकिन यह इसका आकार बदल नहीं करता है। यह कुछ करता है, क्योंकि तस्वीर का आकार 120 केबी से 20 केबी तक गिर जाता है, लेकिन आयाम समान रहते हैं।

शायद आप कम कोड वाले वर्गों में छवियों को फसल करने का तरीका भी सुझा सकते हैं। मैंने थोड़ी सी सोचा कि छवि। थंबनेल यह करता है, लेकिन यह क्या हुआ था कि यह मेरी छवि को चौड़ाई से 150 पीएक्स तक बढ़ा दिया, ऊंचाई 100px छोड़ दिया।

एलन।

उत्तर

71

resize() किसी छवि की एक प्रतिलिपि बनाई गई प्रतिलिपि देता है। यह मूल को संशोधित नहीं करता है। इसका इस्तेमाल करने के लिए सही तरीका है:

img = img.resize((150, newheight), image.ANTIALIAS) 

source

मुझे लगता है कि आप के लिए देख रहे है ImageOps.fit कार्य करते हैं। जनहित याचिका docs से:

ImageOps.fit (छवि, आकार, विधि, खून, केंद्रित) => छवि

रिटर्न छवि का एक आकार और क्रॉप संस्करण, अनुरोध किया पहलू अनुपात के लिए क्रॉप और आकार। आकार तर्क अनुरोधित आउटपुट आकार पिक्सल में है, (चौड़ाई, ऊंचाई) टुपल के रूप में दिया गया है।

+2

धन्यवाद! वह यह था। यह फिर से इस बेवकूफ, आसान तरह की गलती थी, कि मैं अक्सर करता हूं: पी। इसे फिर से देखकर मैं समझ नहीं पा रहा हूं कि मैं इसे कैसे समझ नहीं पाया - यह सब के बाद बहुत ही डॉक्स में था। मुझे लगता है कि मुझे बिस्तर पर जाने की जरूरत है। धन्यवाद फिर से और बीमार किसी अन्य दिन ImageOps.fit को आजमाएं: डी –

+0

@Zayatzz, इसलिए @ नादिया के उत्तर को स्वीकार करें, क्योंकि यह आपकी समस्या हल हो गया है _and_ यहां तक ​​कि बेहतर दृष्टिकोण पर भी सलाह प्रदान की गई है! –

+3

आह .. वह अजीब चेक मार्क .... ओहवेल। यह कुछ और ध्यान आकर्षित करने के लिए कुछ उपयोग कर सकता है। –

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