2011-02-15 12 views
11

¿Cómo puedo determinar programáticamente el formato de imagen de un archivo de imagen, incluida la codificación específica, como el grupo TIFF?¿Determina el formato de un archivo de imagen?

+1

Tome un vistazo a este artículo: http://www.mikekunz.com/image_file_header.html explica el encabezado de los archivos de imagen más comunes , tendrá que leerlo y luego compararlo con lo que espera o simplemente deducir del encabezado el formato de imagen. –

+0

Es un buen artículo, pero no ayuda con los atributos específicos de formato. –

+0

@Ross [Si no le importa profundizar en el códec, puede comenzar aquí] (http://code.google.com/p/fb2pdf/source/browse/trunk/src/java/src/com/itextpdf/text/ pdf/codec/TiffImage.java? r = 623) – Reno

Respuesta

4

ver mi respuesta aquí:

Find image format using Bitmap object in C#

using System.Linq; 

//... 

//get image 
var file_bytes = System.Convert.FromBase64String(@"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="); 
var file_stream = new System.IO.MemoryStream(file_bytes); 
var file_image = System.Drawing.Image.FromStream(file_stream); 

//get image format 
var file_image_format = typeof(System.Drawing.Imaging.ImageFormat).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static).ToList().ConvertAll(property => property.GetValue(null, null)).Single(image_format => image_format.Equals(file_image.RawFormat)); 
System.Diagnostics.Debug.WriteLine(file_image_format, "file_image_format"); 

//get image codec 
var file_image_format_codec = System.Drawing.Imaging.ImageCodecInfo.GetImageDecoders().ToList().Single(image_codec => image_codec.FormatID == file_image.RawFormat.Guid); 
System.Diagnostics.Debug.WriteLine(file_image_format_codec.CodecName + ", mime: " + file_image_format_codec.MimeType + ", extension: " + file_image_format_codec.FilenameExtension, "image_codecs", "file_image_format_type"); 
+0

Un molesto El efecto secundario es que si el archivo NO es una imagen, al tratar de cargarlos desde la secuencia se lanzará silenciosamente una extraña Excepción de OutOfMemory. Al menos los ves reportados al depurar en Visual Studio. Es transparente pero molesto ver todas esas excepciones OOM. –

1

si no encuentra ninguna biblioteca prefabricada supongo que debe abrir el archivo como binario y buscar los datos del encabezado, lo que significa que debe saber cómo se ve el encabezado para cada formato que le gustaría apoyar .

Cuestiones relacionadas