使用ImageIO创建动画GIF?

时间:2009-04-22 15:51:23

标签: java animated-gif javax.imageio

有没有人设法说服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 个答案:

答案 0 :(得分:30)

我遇到了这个问题,并决定尝试一下;花了很少但非平凡的数量来创建一个可用的类(感谢ax) - 所以我想我可能会共享代码:here是一个用于创建动画gif图像的小类其他图像的数量。