2010-01-21 12 views
8

बनाने मैं एक फ़ाइल है कि x और y निर्देशांक (नहीं एक खुला स्रोत छवि प्रारूप) भर में तीव्रता मूल्यों को निर्दिष्ट से बाइनरी डेटा पढ़ रहा हूँ और यह एक PNG छवि (या अन्य व्यापक रूप से समर्थित प्रारूप) को परिवर्तित करना चाहते हैं। मैं डेटा एक सरणी में लोड किया है, जहां प्रत्येक तत्व 0 से 255 के लिए एक पूर्णांक एक PNG को यह बचाने के लिए मैं बहुत की तरह प्रत्येक तत्व (एक्स) के एक 3 आइटम टपल बना सकते हैं (सरणी मॉड्यूल का उपयोग करके):ग्रेस्केल छवि

t = (x, x, x) 

जोड़ने सरणी नक्शा() का उपयोग कर के पार लागू होते हैं, तो छवि का उपयोग कर putdata बचाने()। हालांकि, tuples की सरणी में रूपांतरण एक लंबा समय लगता है (कुछ मिनट)। क्या केवल एक पूर्णांक (टुपल नहीं) का उपयोग करके आरजीबी मान निर्दिष्ट करने का कोई तरीका है। मैं एक विकल्प अनुमान लगा रहा हूं कि न्यूमपी का उपयोग करना होगा, लेकिन मुझे नहीं पता कि कहां से शुरू करना है, इसलिए इस संबंध में किसी भी मदद की भी सराहना की जाएगी।

सहायता के लिए अग्रिम धन्यवाद।

उत्तर

11

आप नई छवि बनाते हैं, तो यह मोड एल दे:

im = Image.new('L', size) 
im.putdata([x1, x2, x3, ...]) 

कहाँ डेटा नहीं tuples मानों की सूची है।

+0

बिल्कुल वही जो मैं खोज रहा था। धन्यवाद! – Vince

3

ऐसा करने के कई तरीके हैं, लेकिन आप पहले से ही स्मृति में डेटा है, तो Image.frombuffer या Image.fromstring का उपयोग कर 'L' मोड (8 बिट ग्रेस्केल डेटा के लिए) का उपयोग करने पर विचार।

0

im.putpixel चाहेंगे (xy, रंग) हो के लिए आप क्या देख रहे हैं?

+0

Putpixel putdata –

+0

से काफी धीमी है। मैं पिछले संस्करण में putpixel() का उपयोग कर रहा था। काम किया लेकिन ~ 10x धीमी है। (Putdata() के लिए 1m30s बनाम 0m15s) – Vince

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