Find image format using Bitmap object in C#

后端 未结 11 2507
半阙折子戏
半阙折子戏 2020-11-29 19:50

I am loading the binary bytes of the image file hard drive and loading it into a Bitmap object. How do i find the image type[JPEG, PNG, BMP etc] from the Bitmap object?

11条回答
  •  借酒劲吻你
    2020-11-29 20:30

    of course you can. ImageFormat doesn't mean much. ImageCodecInfo has much more meaning.

    red_dot.png

    red_dot.png

    
        red_dot.png
    
    

    code:

    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);
    
    //list image formats
    var image_formats = typeof(System.Drawing.Imaging.ImageFormat).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static).ToList().ConvertAll(property => property.GetValue(null, null));
    System.Diagnostics.Debug.WriteLine(image_formats.Count, "image_formats");
    foreach(var image_format in image_formats) {
        System.Diagnostics.Debug.WriteLine(image_format, "image_formats");
    }
    
    //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");
    
    //list image codecs
    var image_codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageDecoders().ToList();
    System.Diagnostics.Debug.WriteLine(image_codecs.Count, "image_codecs");
    foreach(var image_codec in image_codecs) {
        System.Diagnostics.Debug.WriteLine(image_codec.CodecName + ", mime: " + image_codec.MimeType + ", extension: " + @image_codec.FilenameExtension, "image_codecs");
    }
    
    //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");
    

    debug output:

    image_formats: 10
    image_formats: MemoryBMP
    image_formats: Bmp
    image_formats: Emf
    image_formats: Wmf
    image_formats: Gif
    image_formats: Jpeg
    image_formats: Png
    image_formats: Tiff
    image_formats: Exif
    image_formats: Icon
    file_image_format: Png
    image_codecs: 8
    image_codecs: Built-in BMP Codec, mime: image/bmp, extension: *.BMP;*.DIB;*.RLE
    image_codecs: Built-in JPEG Codec, mime: image/jpeg, extension: *.JPG;*.JPEG;*.JPE;*.JFIF
    image_codecs: Built-in GIF Codec, mime: image/gif, extension: *.GIF
    image_codecs: Built-in EMF Codec, mime: image/x-emf, extension: *.EMF
    image_codecs: Built-in WMF Codec, mime: image/x-wmf, extension: *.WMF
    image_codecs: Built-in TIFF Codec, mime: image/tiff, extension: *.TIF;*.TIFF
    image_codecs: Built-in PNG Codec, mime: image/png, extension: *.PNG
    image_codecs: Built-in ICO Codec, mime: image/x-icon, extension: *.ICO
    Built-in PNG Codec, mime: image/png, extension: *.PNG
    

提交回复
热议问题