使用C#ImageFormat类的WebP图像

时间:2013-11-27 01:03:56

标签: c# webp

我正在从网上下载图片以在本地保存。它适用于任何其他图像格式,但当我尝试读取WebP图像时,下面的方法失败并带有参数异常。

    private static Image GetImage(string url)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            return Image.FromStream(response.GetResponseStream());
        }
        catch
        {
            return null;
        }
    }

你如何在C#中阅读.webp图像? 我发现了另一个允许在不同类型之间进行转换的问题,但我不想这样做WebP library for C#

我不想这样做的原因是因为我认为它可能会失去一些品质。此外,我想知道为什么这不起作用。

2 个答案:

答案 0 :(得分:3)

基类库不会帮助您处理WebP图像。但是,如果您只想将收到的文件保存到磁盘,则不必知道您正在处理WebP图像。您可以简单地将收到的数据视为二进制blob并将其转储到文件中,例如使用Stream.CopyToFileStream

Content-Type HTTP标头会为您提供您正在下载的文件的mime类型,Content-Disposition标头可以为您提供文件名和扩展名(尽管您可能需要这样做)一些解析)。您可以使用HttpWebResponse.ContentTypeHttpWebResponse.Headers["Content-Disposition"]

访问这些内容

答案 1 :(得分:1)

@Trillian钉了它。这是我根据他的建议做的代码片段。想要添加代码,不要将其作为评论发布。

要获得图像文件扩展名,您可以执行此操作

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();    
string fileExt = response.ContentType.Replace("image/", string.Empty);            

要获取带扩展名的文件名,您可以执行以下操作并像上面那样进行解析。它只有更多的数据。

response.Headers["Content-Disposition"];

如果您有要保存的文件名,请创建文件流并将响应流复制到其中。

FileStream fs = new FileStream(targetPath + fileName, FileMode.Create);
response.GetResponseStream().CopyTo(fs);

假设您的应用有权访问目标,则应保存图像。确保添加try catch并正确处理异常。另请注意,如果文件已存在,FileMode.Create将覆盖!