23

有没有人设法说服 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 并可以分享一段工作代码或如何解决上述问题,将不胜感激!

4

1 回答 1

30

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

于 2009-04-25T21:05:02.853 回答