una que para optimizar jpg imagenes imagen guardar formato editada cómo como php python image

php - que - ¿Cómo verifico mediante programación si una imagen(PNG, JPEG o GIF) está dañada?



optimizar imagenes para web photoshop (5)

En PHP, con exif_imagetype() :

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

EDITAR : O puede intentar cargar completamente la imagen con ImageCreateFromString() :

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

Un recurso de imagen será devuelto en el éxito. Se devuelve FALSE si el tipo de imagen no es compatible, los datos no están en un formato reconocido o si la imagen está dañada y no se puede cargar.

Bueno. Así que tengo alrededor de 250,000 imágenes de alta resolución. Lo que quiero hacer es revisarlos todos y encontrar los que están dañados. Si sabes lo que es 4scrape, entonces conoces la naturaleza de las imágenes I.

Corrupta, para mí, la imagen se carga en Firefox y dice

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

Ahora, podría seleccionar todas mis 250,000 imágenes (~ 150 gb) y arrastrarlas y soltarlas en Firefox. Sin embargo, eso sería malo, porque no creo que Mozilla haya diseñado Firefox para abrir 250,000 pestañas. No, necesito una forma de verificar mediante programación si una imagen está dañada.

¿Alguien sabe una biblioteca de PHP o Python que pueda hacer algo en este sentido? ¿O una pieza de software existente para Windows?

Ya eliminé las imágenes obviamente dañadas (como las que tienen 0 bytes), pero estoy casi un 99.9% seguro de que hay más imágenes enfermas flotando en mi multitud de colecciones.


Le sugiero que revise imagemagick para esto: http://www.imagemagick.org/

allí tiene una herramienta llamada identificar que puede usar en combinación con un script / stdout o puede usar la interfaz de programación provista


Podrías usar imagemagick si está disponible:

si quieres hacer una carpeta entera

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

Si solo quieres revisar un archivo:

identify myfile.jpg


Si sus requisitos exactos son que se muestre correctamente en FireFox, es posible que tenga un momento difícil: la única forma de asegurarse sería vincular exactamente el mismo código fuente de carga de la imagen que FireFox.

La corrupción de la imagen básica (el archivo está incompleto) se puede detectar simplemente intentando abrir el archivo utilizando cualquier número de bibliotecas de imágenes.

Sin embargo, muchas imágenes pueden no mostrarse simplemente porque extienden una parte del formato de archivo que el visor particular que está utilizando no puede manejar (GIF en particular tiene muchos de estos casos de borde, pero puede encontrar JPEG y el raro archivo PNG que solo se puede mostrar en espectadores específicos). También hay algunos casos feos en el borde JPEG donde el archivo parece no estar dañado en el visor X, pero en realidad el archivo se ha cortado y solo se muestra correctamente porque se ha perdido muy poca información (FireFox puede mostrar algunos archivos JPEG eliminados correctamente [ obtienes un fondo gris], pero otros dan como resultado que Firefox parece que los carga a la mitad y luego muestra el mensaje de error en lugar de la imagen parcial)


Una forma fácil sería intentar cargar y verificar los archivos con PIL (Python Imaging Library).

from PIL import Image v_image = Image.open(file) v_image.verify()

Atrapa las excepciones ...

De la documentación :

im.verify ()

Intenta determinar si el archivo está roto, sin descodificar realmente los datos de la imagen. Si este método encuentra algún problema, genera excepciones adecuadas. Este método solo funciona en una imagen recién abierta; Si la imagen ya se ha cargado, el resultado no está definido. Además, si necesita cargar la imagen después de usar este método, debe volver a abrir el archivo de imagen.