2011-07-05 5 views
9

के तहत आकार बदलने मैं एक छवि का आकार बदलना होगा, लेकिन मैं जनहित याचिका से बचने के लिए, के बाद से मैं इसे ओएस एक्स के तहत काम नहीं कर सकते हैं चाहता हूँ - मुझे मत पूछो क्यों ...छवि PhotoImage

वैसे भी जब से मैं से संतुष्ट हूँ gif/PGM/पीपीएम, PhotoImage वर्ग मेरे लिए ठीक है:

photoImg = PhotoImage(file=imgfn) 
images.append(photoImg) 
text.image_create(INSERT, image=photoImg) 

समस्या है - मैं कैसे छवि का आकार करते हैं? निम्नलिखित पीआईएल के साथ ही काम करता है, जो गैर-पीआईएल समतुल्य है?

img = Image.open(imgfn) 
img = img.resize((w,h), Image.ANTIALIAS) 
photoImg = ImageTk.PhotoImage(img) 
images.append(photoImg) 
text.image_create(INSERT, image=photoImg) 

धन्यवाद!

उत्तर

7

आपको या तो subsample() या PhotoImage कक्षा के विधियों का उपयोग करना होगा। पहला विकल्प के लिए आप पहले पैमाने कारकों, बस निम्नलिखित लाइनों में विस्तार से बताया गणना करने के लिए है:

scale_w = new_width/old_width 
scale_h = new_height/old_height 
photoImg.zoom(scale_w, scale_h) 
+0

मुझे क्या चाहिए! केवल समस्या यह है कि, ज़ूम() पूर्णांक तर्क चाहता है, जो थोड़ा अजीब है क्योंकि मैं 640x480 से 320x240 से कहां पुनर्विक्रय करना चाहता हूं: उस स्थिति में मुझे ज़ूम (0,0) मिलेगा। या 2x – alessandro

+1

से कम, एक छोटे कारक में ज़ूम करना, तो मुझे लगता है कि आपको 'subsample' विधि का उपयोग करना होगा। – Constantinius

+1

मुझे लगता है कि इसे करना होगा! बस यह भी पता चला कि यह शायद एक ही आकार बदलने के लिए थोड़ा और सुविधाजनक था, लेकिन टीके डिजाइनरों ने इस बारे में नहीं सोचा था (यदि आपको इसकी आवश्यकता है, तो पीआईएल का उपयोग करें) _ http://effbot.org/zone/ पर tkinter-photoimage-ग्रेस्केल-ramp.htm – alessandro

10

क्योंकि zoom() और subsample() दोनों पैरामीटर के रूप में पूर्णांक चाहते हैं, मैं दोनों का इस्तेमाल किया।

मैं 250x250 को 320x320 छवि का आकार बदलने के लिए किया था, मैं

imgpath = '/path/to/img.png' 
img = PhotoImage(file=imgpath) 
img = img.zoom(25) #with 250, I ended up running out of memory 
img = img.subsample(32) #mechanically, here it is adjusted to 32 instead of 320 
panel = Label(root, image = img) 
1

साथ समाप्त हो गया मैं तो बस एक ही समस्या थी, और मैंने पाया कि @Memes 'जवाब नहीं बल्कि अच्छी तरह से काम करता है। बस अपने अनुपात को जितना संभव हो उतना कम करना सुनिश्चित करें, क्योंकि subsample() किसी कारण से चलाने के लिए काफी समय लगता है।

असल में, छवि को दो आकारों के कम से कम सामान्य कारक में ज़ूम किया गया है, और उसके बाद मूल आकार द्वारा सब्सिडी दी जा रही है। यह आपको वांछित आकार की छवि के साथ छोड़ देता है।