下载动态GIF

5

我使用以下方法从网络上获取动画gif。但是,在保存到磁盘后,gif中的帧数丢失,不再播放动画。不确定问题出在下面的方法中还是在保存时,但任何有关为什么下面的方法不起作用的反馈都将不胜感激。该方法可行-只是没有创建一个正确的动画gif文件。

public Image getImage(String url)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
    HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
    Stream stream = httpWebReponse.GetResponseStream();
    return Image.FromStream(stream, true, true);
}

Image im = getImage(url)
im.Save(pth,ImageFormat.Gif);

1
你能使用WebImage类吗?或者,不要将其视为图像进行处理,而是将其仅视为字节流,并将其保存到具有.gif扩展名的文件中;如果上传的是动画gif,则会正确保存。 - Rob G
可能是[C# gif图像转换为MemoryStream并返回(丢失动画)]的重复问题(https://dev59.com/5moy5IYBdhLWcg3wHabt)。 - Blachshma
1个回答

8

不应该从流中创建Image它只会存储第一帧)。相反,您应该直接将Stream的内容写入磁盘,例如使用Stream.CopyTo方法将内容复制到您为目标文件创建的FileStream

using (Stream stream = httpWebReponse.GetResponseStream())
using (FileStream fs = File.Create(path))
{
    stream.CopyTo(fs);
}

或者使用MemoryStream? - Squiggs.
2
由于.NET没有动画GIF的编码器,因此它只对第一帧进行编码。 - Daniel A.A. Pelsmaeker
太好了,现在只需要有人更新Rasmus的答案,并为所有复制粘贴的编码者添加using语句。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接