Swing/ExtractFramesFromAnimatedGif のバックアップ(No.20)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ExtractFramesFromAnimatedGif へ行く。
- 1 (2013-03-18 (月) 02:26:09)
- 2 (2013-03-18 (月) 03:34:16)
- 3 (2013-03-18 (月) 15:23:31)
- 4 (2013-03-19 (火) 16:12:16)
- 5 (2013-09-06 (金) 11:30:05)
- 6 (2014-03-18 (火) 18:52:56)
- 7 (2014-11-25 (火) 03:03:31)
- 8 (2014-12-19 (金) 14:21:32)
- 9 (2016-03-01 (火) 14:00:49)
- 10 (2016-05-31 (火) 14:34:27)
- 11 (2016-06-16 (木) 01:04:23)
- 12 (2017-09-19 (火) 06:30:59)
- 13 (2018-10-15 (月) 13:21:16)
- 14 (2020-10-16 (金) 19:15:47)
- 15 (2022-08-17 (水) 14:29:17)
- 16 (2025-01-03 (金) 08:57:02)
- 17 (2025-01-03 (金) 09:01:23)
- 18 (2025-01-03 (金) 09:02:38)
- 19 (2025-01-03 (金) 09:03:21)
- 20 (2025-01-03 (金) 09:04:02)
- category: swing
folder: ExtractFramesFromAnimatedGif
title: Animated Gifからフレーム画像を抽出する
tags: [ImageIO, ImageReader, BufferedImage, Animation, AnimatedGif]
author: aterai
pubdate: 2013-03-18T02:26:09+09:00
description: Animated GIFから各フレームの画像を抽出します。
image:
Summary
Animated GIF
から各フレームの画像を抽出します。主にSwing - Reading gif animation frame rates and such?の回答を参考に作成しています。
Screenshot

Advertisement
Source Code Examples
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, KotlinExplanation
上記のサンプルでは、ImageReader
にAnimated GIF
ファイルを読み込んでIIOImage#getRenderedImage()
メソッドで各フレームのBufferedImage
を取得しています。
- 背景色や差分フレームは無視している
try-with-resources
を使っているのでJDK 1.7.0
以上が必要
Reference
- Swing - Reading gif animation frame rates and such?
- JPEGファイルのコメントを取り出す
- JLabelに表示したAnimated Gifのアニメーションを停止する
- Animated GIFでのコマ描画時処理