Animated Gifからフレーム画像を抽出する
Total: 5802
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
Animated GIF
から各フレームの画像を抽出します。主にSwing - Reading gif animation frame rates and such?の回答を参考に作成しています。
Screenshot
Advertisement
サンプルコード
private static List<BufferedImage> loadFromStream(ImageInputStream imageStream) throws IOException {
Iterable<ImageReader> it = () -> ImageIO.getImageReaders(imageStream);
ImageReader reader = StreamSupport.stream(it.spliterator(), false)
.filter(MainPanel::checkGifFormat)
.findFirst()
.orElseThrow(() -> new IOException("Can not read image format!"));
reader.setInput(imageStream, false, false);
List<BufferedImage> list = new ArrayList<>();
for (int i = 0; i < reader.getNumImages(true); i++) {
IIOImage frame = reader.readAll(i, null);
list.add((BufferedImage) frame.getRenderedImage());
}
reader.dispose();
return list;
}
private static boolean checkGifFormat(ImageReader reader) {
String metaFormat = reader.getOriginatingProvider().getNativeImageMetadataFormatName();
String name;
try {
name = reader.getFormatName();
} catch (IOException ex) {
name = "";
}
return "gif".equalsIgnoreCase(name) && "javax_imageio_gif_image_1.0".equals(metaFormat);
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、ImageReader
にAnimated GIF
ファイルを読み込んでIIOImage#getRenderedImage()
メソッドで各フレームのBufferedImage
を取得しています。
- 背景色や差分フレームは無視している
try-with-resources
を使っているのでJDK 1.7.0
以上が必要
参考リンク
- Swing - Reading gif animation frame rates and such?
- JPEGファイルのコメントを取り出す
- JLabelに表示したAnimated Gifのアニメーションを停止する
- Animated GIFでのコマ描画時処理