我正在从互联网网址上阅读gif
图片。
// URL of a sample animated gif, needs to be wrapped in try-catch block
URL imageUrl = new Url("http://4.bp.blogspot.com/-CTUfMbxRZWg/URi_3Sp-vKI/AAAAAAAAAa4/a2n_9dUd2Hg/s1600/Kei_Run.gif");
// reads the image from url and stores in BufferedImage object.
BufferedImage bImage = ImageIO.read(imageUrl);
// creates a new `java.io.File` object with image name
File imageFile = new File("download.gif");
// ImageIO writes BufferedImage into File Object
ImageIO.write(bImage, "gif", imageFile);
代码执行成功。但是,保存的图像不会像源图像那样动画。
我已经查看了许多堆栈溢出问题/答案,但我无法解决这个问题。他们中的大多数都是按BufferedImage
逐帧进行,这会改变帧速率。我不想要更改源图像。我想下载它,因为它具有相同的大小,相同的分辨率和相同的帧速率。
请注意我希望避免尽可能多地使用streams
和unofficial-libraries
(如果没有他们就无法完成,我将使用它们。)
如果有ImageIO
的替代方式或我从网址上读取图片的方式,并且完成了这件事,请指出我的方向。
答案 0 :(得分:2)
无需解码图像然后重新编码。
只需读取图像的字节,然后将字节按原样写入文件:
try (InputStream in = imageUrl.openStream()) {
Files.copy(in, new File("download.gif").toPath());
}