अपडेट करें
मैंने अपनी पाइथन लिपि में निम्न समाधान को GitHub पर यहां लागू किया ।
मैंने यह भी सत्यापित किया है कि क्षतिग्रस्त फ़ाइलें (jpg) अक्सर 'टूटी हुई' छवियां नहीं होती हैं, यानी क्षतिग्रस्त तस्वीर फ़ाइल कभी-कभी एक वैध चित्र फ़ाइल बनी रहती है, मूल छवि खो जाती है या बदल जाती है, लेकिन आप अभी भी इसे बिना किसी त्रुटि के लोड करने में सक्षम हैं। लेकिन, फ़ाइल ट्रंकेशन हमेशा त्रुटियों का कारण बनता है।
अंत अद्यतन
एक फ़ाइल वैध और अक्षुण्ण छवि फ़ाइल है यह जाँचने के लिए, आप अधिकांश छवि प्रारूपों के साथ पायथन पिलो (PIL) मॉड्यूल का उपयोग कर सकते हैं ।
यदि आप टूटी हुई छवियों का पता लगाने का लक्ष्य रखते हैं, तो @Nadia Alramli सही तरीके से im.verify()
विधि का सुझाव देता है, लेकिन यह सभी संभावित छवि दोषों काim.verify
पता नहीं लगाता है , उदाहरण के लिए, काट-छाँट वाली छवियों का पता नहीं लगाता है (जो कि अधिकांश दर्शक अक्सर प्रभावित क्षेत्र के साथ लोड होते हैं)।
तकिया इस प्रकार के दोषों का भी पता लगाने में सक्षम है, लेकिन आपको चेक को ट्रिगर करने के लिए छवि हेरफेर या छवि डीकोड / रीकोड लागू करना होगा। अंत में मैं इस कोड का उपयोग करने का सुझाव देता हूं:
try:
im = Image.load(filename)
im.verify() #I perform also verify, don't know if he sees other types o defects
im.close() #reload is necessary in my case
im = Image.load(filename)
im.transpose(PIL.Image.FLIP_LEFT_RIGHT)
im.close()
except:
#manage excetions here
छवि दोष के मामले में यह कोड एक अपवाद बढ़ाएगा। कृपया विचार करें कि im.verify छवि हेरफेर करने की तुलना में लगभग 100 गुना तेज है (और मुझे लगता है कि फ्लिप सस्ता परिवर्तनों में से एक है)। इस कोड के साथ आप मानक तकिए के साथ लगभग 10 एमबीटी / सेकेंड पर छवियों के एक सेट को सत्यापित करने जा रहे हैं या पिलो-सिमडी मॉड्यूल (आधुनिक 2.5 जीएचजेड x86_64 सीपीयू) के साथ 40 एमबीटी / सेकंड सेक।
अन्य प्रारूपों के लिए PSD , XCF , .. आप उपयोग कर सकते ImageMagick आवरण वैंड , कोड के रूप में इस प्रकार है:
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
लेकिन, मेरे प्रयोगों से वांड की छंटनी की गई छवियों का पता नहीं चलता, मुझे लगता है कि यह बिना किसी संकेत के ग्रेयर्ड क्षेत्र के रूप में भागों की कमी है।
मैं यह बताता हूं कि Imagemagick के पास एक बाहरी कमांड की पहचान है जो काम कर सकती है , लेकिन मुझे उस फ़ंक्शन को प्रोग्रामेटिक रूप से लागू करने का कोई तरीका नहीं मिला है और मैंने इस मार्ग का परीक्षण नहीं किया है।
मैं हमेशा एक प्रारंभिक जांच करने का सुझाव देता हूं, फाइलों को शून्य (या बहुत छोटा) नहीं होने की जांच करें, एक बहुत सस्ता विचार है:
statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
#manage here the 'faulty image' case