带有C#ImageFormat类的WebP图像

带有C#ImageFormat类的WebP图像,c#,webp,C#,Webp,我正在从网上下载图片以保存在本地。它适用于任何其他图像格式,但当我尝试读取WebP图像时,下面的方法失败,参数异常 private static Image GetImage(string url) { try { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); HttpWebResponse response

我正在从网上下载图片以保存在本地。它适用于任何其他图像格式,但当我尝试读取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图像。但是,如果您只想将收到的文件保存到磁盘,您甚至不必知道您正在处理一个WebP映像。您可以简单地将接收到的数据视为二进制blob并将其转储到文件中,例如使用
Stream.CopyTo
FileStream


HTTP头将为您提供正在下载的文件的mime类型,并且头可以为您提供文件名和扩展名(尽管您可能需要进行一些解析)。您可以使用
HttpWebResponse.ContentType
HttpWebResponse.Headers[“Content Disposition”]
访问这些文件。基类库不会帮助您处理WebP图像。但是,如果您只想将收到的文件保存到磁盘,您甚至不必知道您正在处理一个WebP映像。您可以简单地将接收到的数据视为二进制blob并将其转储到文件中,例如使用
Stream.CopyTo
FileStream


HTTP头将为您提供正在下载的文件的mime类型,并且头可以为您提供文件名和扩展名(尽管您可能需要进行一些解析)。您可以使用
HttpWebResponse.ContentType
HttpWebResponse.Headers[“内容处置”]

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

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

如果您只想在本地保存图像,为什么还要麻烦将其解析为图像呢?只需将其视为二进制BLB并将其转储到文件中,例如使用<代码> Studio。CopyTo(new FielestRAMM(…))< /代码>。在基类库中找不到任何东西来处理WebP图像。如果这样做,我将如何指定扩展?无法硬编码,因为它可能是C#无法识别的另一种格式。我需要文件在保存后立即可用。@Trillian,如果你有任何想法,请告诉我。忘记在最后一条评论中标记你的名字,所以不确定是否收到通知。如果你只想在本地保存图像,为什么还要麻烦将其解析为图像?只需将其视为二进制BLB并将其转储到文件中,例如使用<代码> Studio。CopyTo(new FielestRAMM(…))< /代码>。在基类库中找不到任何东西来处理WebP图像。如果这样做,我将如何指定扩展?无法硬编码,因为它可能是C#无法识别的另一种格式。我需要文件在保存后立即可用。@Trillian,如果你有任何想法,请告诉我。忘记在最后一条评论中标记您的姓名,因此不确定是否收到通知。