त्वरित सुधार
सबसे पहले, आप एक भी गैर-नेस्टेड सूची में अपने पिक्सेल tuples है की जरूरत है:
pixels_out = []
for row in pixels:
for tup in row:
pixels_out.append(tup)
इसके बाद, एक नई छवि वस्तु, इनपुट छवि के गुणों का उपयोग कर, और इसे में डेटा डाल: अंत में
image_out = Image.new(image.mode,image.size)
image_out.putdata(pixels_out)
, सहेजें:
image_out.save('test_out.png')
मौलिक मुद्दा
आपकी सूची समझ, बाद किया जा रहा है टुकड़ा करने की क्रिया (i*width:(i+1)*width
) द्वारा उत्पन्न सूचियों की एक सूची उत्पन्न करता है। आपकी समझ बहुत आसान हो सकती है: pixels = [pixel for pixel in pixels]
। जाहिर है यह एक ही सूची, pixels
आउटपुट करता है, लेकिन आप पिक्सल पर एक ऑपरेशन करने के लिए विचार का उपयोग कर सकते हैं, उदा। pixels = [operation(pixel) for pixel in pixels]
।
वास्तव में, आपने इसे अधिक विचार किया। आपको छवि आयामों को प्रबंधित करने की आवश्यकता नहीं है। सूची में पिक्सल प्राप्त करना, और फिर उन्हें putdata
के साथ एक बराबर आकार वाली छवि में डालना क्रम में रहता है क्योंकि उन्हें पीआईएल द्वारा उसी तरह रैखिक किया जाता है। आप आप काहिरा कर सकते हैं
from PIL import Image
image = Image.open("test.png")
image_out = Image.new(image.mode,image.size)
pixels = list(image.getdata())
image_out.putdata(pixels)
image_out.save('test_out.png')
यह एक साफ विचार है, लेकिन अगर आप पहले से ही पीआईएल का उपयोग कर रहे हैं तो ओवरकिल। – rjonnal
ओपी ने यह निर्दिष्ट नहीं किया कि वह क्या उपयोग कर रहा था। उन्होंने पूछा, "मैं पाइथन में पिक्सेल मानों की सूची से पीएनजी छवि फ़ाइल कैसे बना सकता हूं?" मैंने एक जवाब दिया। शायद, वह बाद में डेटा का पुन: उपयोग करना चाहता है? अनुमति नहीं है या क्या? –
काहिरा निश्चित रूप से * अनुमति है *। मुझे यकीन नहीं है कि डेटा पुन: उपयोग के साथ क्या करना है। ओपी ने निर्दिष्ट किया कि वह पीआईएल का उपयोग कर रहा है। – rjonnal