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