【问题标题】:How to get contentType from System.Drawing.Imaging.ImageFormat如何从 System.Drawing.Imaging.ImageFormat 获取 contentType
【发布时间】:2011-11-02 11:48:18
【问题描述】:

如果我有 Bitmap 并且它有 RawFormat 属性。

如何从这个 ImageFormat 对象中获取内容类型?

Bitmap image = new Bitmap(stream);
ImageFormat imageFormat = image.RawFormat;
//string contentType = ?

【问题讨论】:

    标签: c# image content-type


    【解决方案1】:

    如果您想根据文件名(或扩展名)确定 MIME 类型,这里有一个使用注册表的链接:Get MimeType from a File Name

    【讨论】:

    • @x2 - 奇怪,我刚刚点击了我的答案,它对我有用。 HTTP 503(服务不可用)应该是一个临时问题。您应该稍后再试。
    【解决方案2】:

    我相信我已经想出了一个非常适合图像的简单解决方案。这使用扩展方法和 Linq,因此它可以在 .net 框架 3.5+ 上运行。这是代码和单元测试:

    public static string GetMimeType(this Image image)
    {
        return image.RawFormat.GetMimeType();
    }
    
    public static string GetMimeType(this ImageFormat imageFormat)
    {
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
        return codecs.First(codec => codec.FormatID == imageFormat.Guid).MimeType;
    }
    
    [TestMethod]
    public void can_get_correct_mime_type()
    {
        Assert.AreEqual("image/jpeg", ImageFormat.Jpeg.GetMimeType());
        Assert.AreEqual("image/gif", ImageFormat.Gif.GetMimeType());
        Assert.AreEqual("image/png", ImageFormat.Png.GetMimeType());
    }
    

    【讨论】:

    • +1 包括工作单元测试(嗯,是正确的答案)
    • 作为一个小改进,使用 GetImageDecoders 而不是 GetImageEncoders 可能会更好。在我的系统上没有 EMF 文件的编码器。但是有一个解码器。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2014-02-28
    • 2012-09-30
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多