2009-04-22 171 views
22

有没有人设法说服ImageIO编写GIF动画,特别是设置正确的元数据?我第一次尝试大致如下(其中B1和B2 BufferedImages):使用ImageIO创建GIF动画?

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的测试网页中确实会显示该文件o图像非常快速连续,这是tantilisingly接近我想要的...

如果有人已经写ImageIF的动画GIF工作,并可以共享工作代码片段或如何解决上述问题, 这将不胜感激!

回答

29

我跑过这个问题,并决定尝试一下;它花了一个小而不平凡的数量创建一个可用的类(感谢ax) - 所以我想我可能会分享代码:here是一个小类,用于从许多其他图像创建动画gif图像。

+1

main()函数提供的示例中存在错误。评论说: `//一个GIF序列,第一个图像的类型,1秒之间的帧,它连续循环,这将是`新的GifSequenceWriter(输出,firstImage.getType(),1000,真)`而不是`new GifSequenceWriter(output,firstImage.getType(),1,false)` – gvlasov 2013-08-14 07:44:28