2013-08-28 7 views
9

में कनवर्ट करें मैं Image.open और Image.verify() के साथ पहले डिस्क पर लिखने के बिना एक बाइटरेयर सत्यापित करने की कोशिश कर रहा हूं और फिर इसे im = Image.open() के साथ खोलें। मैंने .readfrombuffer() और .readfromstring() विधि को देखा, लेकिन वहां मुझे छवि के आकार की आवश्यकता है (जिसे मैं केवल छवि में बाइटस्ट्रीम को परिवर्तित करते समय प्राप्त कर सकता हूं)। गलतपीआईएल: बाइटियर को छवि

bytes = readimage(path+extension) 
im = Image.open(StringIO(bytes)) 
im.save(savepath) 

कोई जानता है मैं क्या कर रहा हूँ या:

def readimage(path): 
bytes = bytearray() 
count = os.stat(path).st_size/2 
with open(path, "rb") as f: 
    print "file opened" 
    bytes = array('h') 
    bytes.fromfile(f, count) 
return bytes 

फिर एक बुनियादी परीक्षण के रूप में मैं एक छवि को bytearray बदलने की कोशिश:

मेरे पढ़ने के समारोह इस तरह दिखता है यदि उन बाइट्स को उस छवि में रूपांतरित करने का एक और शानदार तरीका है जो वास्तव में मेरी मदद करेगा।

पीएस .: मैंने सोचा कि मुझे बाइटरेयर की आवश्यकता है क्योंकि मैं बाइट्स पर छेड़छाड़ करता हूं (उन्हें छवियों को गड़बड़ाना)। यह काम करता था, लेकिन मैं इसे डिस्क पर लिखने के बिना करना चाहता था और फिर डिस्क से छविफाइल को फिर से खोलना चाहता था कि यह टूट गया है या नहीं।

संपादित करें: सभी यह देता है मुझे एक IOError: cannot identify image file

+0

आप छवि को numpy array में क्यों नहीं पढ़ते? –

+1

@ विकटकरकेकेज़ क्योंकि मैं छवियों के बाइट्स में हेरफेर करना चाहता हूं। मेरे पास मैनिपुलेशन भाग के लिए कोडिंग कोड है, लेकिन अब मैं सत्यापित करना चाहता हूं कि आउटपुट छवि वास्तव में पूरी तरह टूट नहीं गई है। तो मैं htearrays – ato

उत्तर

10

है आप bytearrays साथ हेरफेर तो आप io.BytesIO उपयोग करने के लिए है। इसके अलावा आप सीधे एक फ़ाइल को bytearray पर पढ़ सकते हैं।

import os 
import io 
import Image 
from array import array 

def readimage(path): 
    count = os.stat(path).st_size/2 
    with open(path, "rb") as f: 
     return bytearray(f.read()) 

bytes = readimage(path+extension) 
image = Image.open(io.BytesIO(bytes)) 
image.save(savepath) 
+0

के साथ काम करने के लिए _have_ क्यों आप आधा st_size? और क्यों 'गिनती' बिल्कुल घोषित करें? – jdborg

+1

@jdborg क्योंकि ओपी ने अपने प्रश्न में एक ही काम किया था। :) मैं बस कोड कॉपी/चिपकाया और त्रुटि तय की। –

+0

यह भी ध्यान देने योग्य होगा कि 'बाइट्स' पायथन में एक आरक्षित शब्द है –

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