使用 ImageIO 创建动画 GIF?

2022-09-01 23:21:15

有没有人设法说服ImageIO编写动画GIF,特别是设置正确的元数据?我的第一次尝试大致如下(其中b1和b2是BufferedImages):

ImageTypeSpecifier spec = new ImageTypeSpecifier(b1);
ImageWriter wr = ImageIO.getImageWriters(spec, "GIF").next();
wr.setOutput(ImageIO.createImageOutputStream(new File("C:\\Flashing.gif")));
ImageWriteParam param = wr.getDefaultWriteParam();
IIOMetadata meta = wr.getDefaultImageMetadata(spec, param);
wr.prepareWriteSequence(meta);
wr.writeToSequence(new IIOImage(b1, null, null), param);
wr.writeToSequence(new IIOImage(b2, null, null), param);

这似乎几乎有效,但是:

  • 我显然需要以某种方式设置“适当”的元数据来设置图像之间的时间,理想情况下使它们循环(我天真地希望默认值会做一些明智的事情,但是嘿......)
  • 默认情况下,它编写的任何元数据显然都不太正确:GIMP在加载文件时会给出一些错误消息,尽管在Firefox中的测试网页中嵌入图像确实会非常快速地连续显示这两个图像,这与我想要的非常接近......

如果有人从ImageIO编写动画GIF来工作,并且可以共享工作代码片段或如何解决上述问题,我们将不胜感激!


答案 1

我遇到了这个问题,并决定尝试一下;创建一个可用的类(感谢ax)花费了一小部分但并非微不足道的金额 - 所以我想我可以分享代码:这是一个小类,用于从许多其他图像创建动画gif图像。存档版本


答案 2

推荐