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

    最佳答案

    我遇到了这个问题,决定尝试一下。创建一个可用的类花了少量但不平凡的事情(感谢ax)-所以我想我可以分享周围的代码:here是一个小类,用于从许多其他图像中创建动画gif图像。 Archived version

    08-28 19:21