হালনাগাদ
আমি আমার পাইথন স্ক্রিপ্টে নিম্নলিখিত সমাধানটি এখানে গিটহাবটিতেও প্রয়োগ করেছি ।
আমি এটিও যাচাই করেছিলাম যে ক্ষতিগ্রস্থ ফাইলগুলি (জেপিজি) প্রায়শই 'ভাঙা' চিত্র নয়, অর্থাত্ কোনও ক্ষতিগ্রস্থ চিত্র ফাইলটি কখনও কখনও একটি লাইট চিত্র ফাইল হিসাবে থাকে, মূল চিত্রটি হারিয়ে যায় বা পরিবর্তিত হয় তবে আপনি এখনও কোনও ত্রুটি ছাড়াই এটি লোড করতে সক্ষম হন। তবে, ফাইল কেটে ফেলার কারণে সর্বদা ত্রুটি হয়।
শেষ আপডেট
আপনি পাইথন বালিশ ব্যবহার করতে পারেনকোনও ফাইল বৈধ এবং অক্ষত চিত্র ফাইল কিনা তা পরীক্ষা করতে আপনি বেশিরভাগ চিত্র ফর্ম্যাট সহ (পিআইএল) মডিউলটি ।
আপনার ভাঙা চিত্রগুলি সনাক্ত করার লক্ষ্যে, @ নদিয়া আলরামলি সঠিকভাবে 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 এমবিাইট / সেকেন্ড সহ চিত্রের একটি সেট যাচাই করতে যাচ্ছেন।
অন্যান্য ফরম্যাটের জন্য পিএসডি , xcf , .. আপনি ব্যবহার করতে পারেন ImageMagick মোড়কের ওয়ান্ড , কোড নিম্নরূপ হয়:
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
তবে, আমার পরীক্ষাগুলি থেকে ওয়ান্ড কাটা চিত্রগুলি সনাক্ত করতে পারে না, আমি মনে করি এটি বিনা প্ররোচনা ছাড়াই গ্রেড অঞ্চল হিসাবে অভাবযুক্ত অংশগুলি লোড করে।
আমি লাল করেছিলাম যে ইমেজম্যাগিকের একটি বহিরাগত কমান্ড রয়েছে যা কাজটি করতে পারে তা সনাক্ত করতে পারে , তবে আমি প্রোগ্রামটিভাবে সেই ফাংশনটি চালানোর কোনও উপায় খুঁজে পাইনি এবং আমি এই রুটটি পরীক্ষা করি নি।
আমি সর্বদা প্রাথমিক চেক করার পরামর্শ দিই, ফাইলসাইজটি শূন্য (বা খুব ছোট) না হওয়ার জন্য পরীক্ষা করুন , খুব সস্তা ধারণা:
statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
#manage here the 'faulty image' case