【问题标题】:Determine the format of an image file?确定图像文件的格式?
【发布时间】:2026-01-12 02:45:01
【问题描述】:

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

【问题讨论】:

标签: c# image image-processing


【解决方案1】:

如果你没有找到任何现成的库,我猜你应该将文件作为二进制文件打开并查找标题数据,这意味着你必须知道你想要支持的每种格式的标题是什么样的。

【讨论】:

    【解决方案2】:

    在这里查看我的答案:

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

    【讨论】:

    • 一个恼人的副作用是,如果文件不是图像,那么尝试从流中加载它们会默默地抛出一个奇怪的 OutOfMemory 异常。至少您在 Visual Studio 中调试时会看到它们报告。看到所有这些 OOM 异常是透明的,但很烦人。