23

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 のテスト Web ページに画像を埋め込むと、2 つの画像が非常に素早く連続して表示されます。私が望むものに近い...

誰かが ImageIO から動作するアニメーション GIF を書き、動作するコードのスニペットまたは上記の問題を修正する方法を共有できる場合は、大歓迎です!

4

1 に答える 1

30

私はこの質問に出くわし、それを試してみることにしました。使用可能なクラスを作成するのに少しかかりましたが、取るに足らない量でした( axに感謝します)-それで私はコードを共有するかもしれないと思いました: これは他の多くの画像からアニメーションGIF画像を作成するための小さなクラスです。アーカイブ版

于 2009-04-25T21:05:02.853 に答える