使用ImageIO创建动画GIF?

是否有人设法说服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)-所以我想我可以分享一下代码: 这是 一个小类,用于从许多其他图像中创建动画gif图像。封存版本

以上是 使用ImageIO创建动画GIF? 的全部内容, 来源链接: utcz.com/qa/399085.html

回到顶部