Güncelleme
Ayrıca GitHub'daki Python betiğimde aşağıdaki çözümü uyguladım .
Ayrıca hasarlı dosyaların (jpg) sıklıkla 'bozuk' resimler olmadığını doğruladım, yani hasarlı bir resim dosyası bazen okunaklı bir resim dosyası olarak kalır, orijinal resim kaybolur veya değiştirilir, ancak yine de hata olmadan yükleyebilirsiniz. Ancak, dosya kesme her zaman hatalara neden olur.
Güncellemeyi Sonlandır
Bir dosyanın geçerli ve bozulmamış bir görüntü dosyası olup olmadığını kontrol etmek için çoğu görüntü formatıyla Python Yastık (PIL) modülünü kullanabilirsiniz .
Bozuk görüntüleri de algılamayı hedeflediğinizde, @Nadia Alramli im.verify()
yöntemi doğru bir şekilde önerir , ancak bu , tüm olası görüntü kusurlarınıim.verify
algılamaz , örneğin kesilmiş görüntüleri algılamaz (çoğu izleyici genellikle gri bir alanla yüklenir).
Yastık bu tür kusurları da algılayabilir, ancak görüntü işleme veya görüntü kod çözme / yeniden kodlama uygulamanız veya kontrolü tetiklemeniz gerekir. Son olarak şu kodu kullanmanızı öneririm:
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
Görüntü kusurları durumunda bu kod bir istisna oluşturacaktır. Lütfen im.verify'ın görüntü işlemeyi gerçekleştirmekten yaklaşık 100 kat daha hızlı olduğunu göz önünde bulundurun (ve bence çevirme daha ucuz dönüşümlerden biridir). Bu kodla, standart Yastık ile yaklaşık 10 MByte / sn veya Pillow-SIMD modülü (modern 2.5Ghz x86_64 CPU) ile 40 MByte / sn hızında bir dizi görüntüyü doğrulayacaksınız.
Diğer formatlar için psd , xcf , .. kullanabileceğiniz ImageMagick'in sarıcı Wand , kod aşağıdaki gibi olduğu:
im = wand.image.Image(filename=filename)
temp = im.flip;
im.close()
Ancak deneylerime göre, Değnek kesilmiş görüntüleri algılamıyor, bence eksik parçaları, sormadan gri alan olarak yüklüyor.
Bunu kırmızı Imagemagick harici komut vardır tanımlamak o olabilir işi yapmak ama programlı o fonksiyonu çağırmak için bir yol bulmuş değil ve ben bu rotayı test etmedim.
Her zaman bir ön kontrol yapmanızı , dosya boyutunun sıfır (veya çok küçük) olup olmadığını kontrol etmenizi öneririm , çok ucuz bir fikirdir:
statfile = os.stat(filename)
filesize = statfile.st_size
if filesize == 0:
#manage here the 'faulty image' case