TITLE:Animated Gifからフレーム画像を抽出する

Posted by at 2013-03-18

Animated Gifからフレーム画像を抽出する

`AnimatedGif`から各フレームの画像を抽出します。主にOTN Discussion Forums : Reading gif animation frame rates and such?の回答を参考に作成しています。

  • &jnlp;
  • &jar;
  • &zip;
ExtractFramesFromAnimatedGif.png

サンプルコード

ImageReader reader = null;
Iterator<ImageReader> readers = ImageIO.getImageReaders(imageStream);
while(readers.hasNext()) {
  reader = readers.next();
  String metaFormat = reader.getOriginatingProvider().getNativeImageMetadataFormatName();
  if("gif".equalsIgnoreCase(reader.getFormatName()) &&
            !"javax_imageio_gif_image_1.0".equals(metaFormat)) {
    continue;
  }else{
    break;
  }
}
if(reader == null) {
  throw new IOException("Can not read image format!");
}
boolean isGif = reader.getFormatName().equalsIgnoreCase("gif");
reader.setInput(imageStream, false, !isGif);
ArrayList<BufferedImage> list = new ArrayList<BufferedImage>();
for(int i=0;i<reader.getNumImages(true);i++) {
  IIOImage frame = reader.readAll(i, null);
  list.add((BufferedImage)frame.getRenderedImage());
}
reader.dispose();
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、`ImageReaderAnimatedGifファイルを読み込ませて、IIOImage#getRenderedImage()で各フレームのBufferedImage`を取得しています。

  • 注:
    • 背景色や差分フレームを無視している
    • `try-with-resourcesを使っているので、JDK 1.7.0`以上が必要

参考リンク

コメント