Nasıl programlı bir görüntü (PNG, JPEG veya GIF) bozuk olup olmadığını kontrol edebilirim?

5 Cevap php

Tamam. Yani yaklaşık 250.000 yüksek çözünürlüklü görüntüler var. Ne yapmak istiyorum hepsini geçmesi ve bozuk olanları bulmak. Eğer 4scrape ne olduğunu biliyorsanız, o zaman görüntüler I. doğasını bilmek

Bozuk, bana, görüntü Firefox yüklenir ve diyor

The image “such and such image” cannot be displayed, because it contains errors.

Şimdi, benim 250,000 tüm görüntüleri (~ 150GB) seçebilirsiniz ve Firefox içine sürükle-n-drop. Ben Mozilla 250,000 sekmeleri açmak için Firefox tasarlanmış sanmıyorum çünkü bu, olsa kötü olurdu. Hayır, ben programlı bir görüntü bozuk olup olmadığını kontrol etmek için bir yol gerekir.

Herkes bu satırlar boyunca bir şey yapabileceği bir PHP veya Python kütüphanesi biliyor mu? Veya Windows için yazılım varolan parça?

Ben zaten açıkça (örneğin 0 bayt olanlar gibi) bozuk görüntüler kaldırdık ama ben bir koleksiyon benim kalabalık etrafında yüzen daha hastalıklı görüntüler olduğu yaklaşık% 99.9 eminim.

Teşekkürler!

5 Cevap

Kolay bir yolu yükleme ve PIL (Python Imaging Library) ile dosyaların doğrulanması denemek olacaktır.

from PIL import Image

v_image = Image.open(file)
v_image.verify()

Durumları yakalamak ...

Dan the documentation:

im.verify()

Attempts to determine if the file is broken, without actually decoding the image data. If this method finds any problems, it raises suitable exceptions. This method only works on a newly opened image; if the image has already been loaded, the result is undefined. Also, if you need to load the image after using this method, you must reopen the image file.

http://www.imagemagick.org/: ben bunun için ImageMagick kontrol öneririz

orada size bir script / stdout ile birlikte kullanabilir veya sağlanan programlama arabirimini kullanabilirsiniz tanımlamak adında bir araç var

Emin olmak için tek yol Firefox gibi aynı görüntü yükleme kaynak koduna bağlamak olacaktır - sizin tam gereksinimler in FireFox zor bir zaman olabilir doğru olduğunu göstermektedir iseniz.

Temel görüntü yolsuzluk (dosya eksik) görüntü kütüphanelerin herhangi bir numarayı kullanarak dosyayı açmaya çalışırken basitçe tespit edilebilir.

Ancak kaç fotoğraf kullandığınız belirli izleyici (GIF özellikle bu kenar durumlarda bir yeri vardır işleyemez dosya biçiminin bir parçası germek, çünkü sadece görüntülemek için başarısız olabilir, ama JPEG ve PNG dosyasını nadir bulabilirsiniz sadece) belirli izleyiciler görüntülenebilir. Orada dosya appears görüntüleyici X bozulmamış olması için bazı çirkin JPEG kenar durumlarda da vardır, ama çok az bilgi (Firefox gösterebilir nedeniyle kesildi gerçekte dosya kısa kesilmiş ve sadece doğru görüntülüyor Bazı) [gri bir alt olsun], ama diğerleri Yükünüz onları yarım görünen ve daha sonra yerine kısmi görüntünün hata iletisi görüntülemek FireFox neden doğru JPEG'leri kesti

PHP ile exif_imagetype():

if (exif_imagetype($filename) === false)
{
    unlink($filename); // image is corrupted
}

EDIT: Ya tam ile resim yüklemek için deneyebilirsiniz ImageCreateFromString():

if (ImageCreateFromString(file_get_contents($filename)) === false)
{
    unlink($filename); // image is corrupted
}

An image resource will be returned on success. FALSE is returned if the image type is unsupported, the data is not in a recognized format, or the image is corrupt and cannot be loaded.

Varsa ImageMagick kullanabilirsiniz:

Eğer bütün bir klasör yapmak istiyorsanız

identify "./myfolder/*" >log.txt 2>&1

Eğer sadece bir dosyayı kontrol etmek istiyorsanız:

identify myfile.jpg