2009-04-22 139 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