2012-04-12 10 views
9

मैं एक पीआईएल छवि ऑब्जेक्ट से एक पिकलेबल फाइल कैसे बना सकता हूं जैसे कि आप उन छवियों को एक एकल अचार फ़ाइल के रूप में सहेज सकते हैं, तो हो सकता है कि किसी अन्य कंप्यूटर पर अपलोड हो जैसे सर्वर पीआईएल चला रहा हो और वहां उसे अनपिक करें?पिकलेबल इमेज ऑब्जेक्ट

उत्तर

16

आप डेटा में छवि वस्तु में बदल सकते हैं तो आप इसके अचार कर सकते हैं:

image = { 
    'pixels': im.tostring(), 
    'size': im.size, 
    'mode': im.mode, 
} 

और वापस एक छवि के लिए:

im = Image.fromstring(image['mode'], image['size'], image['pixels']) 

नोट:astex जैसा कि बताया जा, अगर आप पिल्लो का उपयोग (जिसे पीआईएल के बजाए अनुशंसित किया जाता है), tostring() विधि tobytes() के लिए बहिष्कृत है। frombytes() के लिए fromstring() के साथ।

+1

'Image.tostring() अब मुझे बहिष्कृत किया गया है 'image.tobytes()' के पक्ष में n 'pillow'। वंशावली के लिए, उपर्युक्त (या कम से कम एक नोट छोड़ना) बेहतर हो सकता है। – astex

9

गेराल्ड के जवाब का उपयोग करने का मामूली बदलाव कीवर्ड आर्ग

बनाने pickleable वस्तु

image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode} 

या

image = dict(data=im.tostring(), size=im.size, mode=im.mode) 

unpickle वापस छवि के लिए

im = Image.fromstring(**image) 
+0

क्या इसका मतलब यह है कि मुझे अपने आवेदन में छवियों को स्टोर करने की आवश्यकता नहीं है? जब मैं छवि का उपयोग करना चाहता हूं तो मैं केवल उस स्ट्रिंग का उपयोग कर सकता हूं जिसे वे क्रमबद्ध करते हैं और एप्लिकेशन के अंदर बस हार्डकोड करते हैं? – Ogen

+0

आप तकनीकी रूप से * ऐसा कर सकते हैं, लेकिन इसे एक वास्तविक फ़ाइल के रूप में रखना बेहतर है ... किसी भी मामले में इसे आपके कोड के साथ संस्करणित किया जा सकता है, लेकिन छवियों के रूप में छवियों को रखने का मतलब है कि आप उन्हें आसानी से देख सकते हैं और जानते हैं कि क्या मीडिया आपने संग्रहित किया है। यदि आप छवियों को कोड के रूप में संग्रहीत कर रहे हैं, तो आप कृत्रिम रूप से अपनी स्रोत फ़ाइलों के आकार को बढ़ा रहे हैं, जिससे उन्हें देखने और खोजने के लिए और अधिक कठिन बना दिया जा रहा है, और अपने मीडिया को प्रबंधित करने के लिए बहुत कठिन बनाना चाहिए, क्या आप उस छवि को देखना और/या बदलना चाहते हैं। – kungphu

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