Swing/ExtractFramesFromAnimatedGif の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ExtractFramesFromAnimatedGif へ行く。
- Swing/ExtractFramesFromAnimatedGif の差分を削除
--- 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: https://lh4.googleusercontent.com/-_xu1jNmYJe0/UUX3d_PzwKI/AAAAAAAABoA/cyS5ABVZdkM/s800/ExtractFramesFromAnimatedGif.png --- * Summary [#summary] `Animated GIF`から各フレームの画像を抽出します。主に[https://community.oracle.com/thread/1271862 Swing - Reading gif animation frame rates and such?]の回答を参考に作成しています。 #download(https://lh4.googleusercontent.com/-_xu1jNmYJe0/UUX3d_PzwKI/AAAAAAAABoA/cyS5ABVZdkM/s800/ExtractFramesFromAnimatedGif.png) * Source Code Examples [#sourcecode] #code(link){{ 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); } }} * Explanation [#explanation] 上記のサンプルでは、`ImageReader`に`Animated GIF`ファイルを読み込んで`IIOImage#getRenderedImage()`メソッドで各フレームの`BufferedImage`を取得しています。 - 背景色や差分フレームは無視している - `try-with-resources`を使っているので`JDK 1.7.0`以上が必要 * Reference [#reference] - [https://community.oracle.com/thread/1271862 Swing - Reading gif animation frame rates and such?] - [[JPEGファイルのコメントを取り出す>Swing/IIOMetadata]] - [[JLabelに表示したAnimated Gifのアニメーションを停止する>Swing/DisableAnimatedGif]] - [[Animated GIFでのコマ描画時処理>Swing/AnimatedGif]] * コメント [#comment] * Comment [#comment] #comment #comment