确定一个图像文件的格式?

12

我如何通过编程确定图像文件的格式,包括特定编码,例如TIFF组?


1
请看这篇文章:http://www.mikekunz.com/image_file_header.html 它解释了最常见的图像文件头,您需要阅读它,然后将其与您期望的内容进行匹配,或者仅从文件头中推断出图像格式。 - Jorge Córdoba
这是一篇不错的文章,但它并没有帮助到特定格式属性的处理。 - C. Ross
@Reno 我正在查看官方格式(http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf)。IText可能会更容易,谢谢。 - C. Ross
你可以在这里看到一个非常简单的解决方案:[1]https://dev59.com/EW435IYBdhLWcg3wyzUJ - Alban Becquet
2个回答

4

请查看我在这里的回答:

使用C#中的Bitmap对象查找图像格式

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");

一个令人讨厌的副作用是,如果文件不是图像类型,则尝试从流中加载文件将会悄无声息地引发奇怪的 OutOfMemory 异常。至少在 Visual Studio 调试时可以看到这些异常。它虽然没有影响操作,但频繁出现的 OOM 异常仍然会让人感到厌烦。 - Lord of Scripts

1

如果你找不到任何现成的库,我猜你应该以二进制方式打开文件并查找头数据,这意味着你必须知道每种格式的头是什么样子,才能支持它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接