具有C#ImageFormat类的WebP图像



我正在从web下载图像以将其保存在本地。它适用于任何其他图像格式,但当我尝试读取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#中阅读.web图像的?我发现了另一个允许在类型之间转换的问题,但我不想为C#做WebP库

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

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

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

@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将覆盖!

相关内容

  • 没有找到相关文章

最新更新