¿Cómo puedo determinar si una imagen que tengo como bytes sin procesar está corrupta o no? ¿Hay alguna biblioteca de código abierto que maneje este problema para múltiples formatos en C#?Lea la imagen y determine si está corrupta C#
Gracias
¿Cómo puedo determinar si una imagen que tengo como bytes sin procesar está corrupta o no? ¿Hay alguna biblioteca de código abierto que maneje este problema para múltiples formatos en C#?Lea la imagen y determine si está corrupta C#
Gracias
intenta crear un GDI + Mapa de bits en el archivo. Si falla la creación del objeto Bitmap, entonces podría suponer que la imagen está dañada. GDI + admite un número de file formats: BMP, GIF, JPEG, Exif, PNG, TIFF.
Algo parecido a esta función debería funcionar:
public bool IsValidGDIPlusImage(string filename)
{
try
{
using (var bmp = new Bitmap(filename))
{
}
return true;
}
catch(Exception ex)
{
return false;
}
}
Usted puede ser capaz de limitar la Exception
sólo ArgumentException
, pero me gustaría experimentar con que primero antes de hacer el cambio.
EDITAR
Si usted tiene un byte[]
, entonces esto debería funcionar:
public bool IsValidGDIPlusImage(byte[] imageData)
{
try
{
using (var ms = new MemoryStream(imageData))
{
using (var bmp = new Bitmap(ms))
{
}
}
return true;
}
catch (Exception ex)
{
return false;
}
}
Bueno, tengo bytes sin formato ... así que he editado la pregunta –
OK. bien parece que es justo lo que necesitaba! Gracias. –
Esto debe usarse con cuidado. Es importante que libere el mapa de bits creado con * utilizando *. De lo contrario, es muy posible que obtenga OutOfMemory Exception mientras comprueba una gran cantidad de archivos porque el sistema se quedó sin recursos y no porque la imagen esté dañada. – Indy9000
Usted puede mirar estos enlaces para la toma de una idea. El primero está aquí; Validate Images
Y el segundo está aquí; How to check corrupt TIFF images
Y lo siento, no conozco ninguna biblioteca externa para esto.
¿Qué formatos de imagen necesitas apoyar? Si solo es el 4 básico (bmp/png/gif/jpg) puede usar la clase de mapa de bits y simplemente intente cargarlos. – Will
posible duplicado de [Cómo validar una imagen JPEG en C#/.Net no está dañado] (http://stackoverflow.com/questions/1173349/how-do-i-validate-a-jpeg-image-in- c-sharp-net-is-not-corrupt) – V4Vendetta
He editado la pregunta. –