【问题标题】:WebP image with C# ImageFormat class带有 C# ImageFormat 类的 WebP 图像
【发布时间】:2013-12-12 10:08:41
【问题描述】:

我正在从网络下载图像以将其保存在本地。它适用于任何其他图像格式,但是当我尝试读取 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#

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

【问题讨论】:

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

标签: c# webp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    @Trillian 成功了。这是我根据他的建议所做的代码 sn-p。想要添加代码,所以不要将其作为评论发布。

    要仅获取图像文件扩展名,您可以这样做

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

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 2018-05-16
      • 1970-01-01
      • 2021-03-13
      • 2015-03-21
      • 2018-06-02
      相关资源
      最近更新 更多