Android+KotlinでGIF動画をフレーム分割⇒画像保存する方法

AndroidでGif動画をこのように扱いたい

  • GIF動画をフレームに分割
  • それぞれを画像として保存する

ここでのGIFとはアニメGIFのことです。

アニメGIFはパラパラ漫画のコマとして分割し、
その各フレームをPNG画像として保存したかったです。

その方法がようやくわかったので、
AndroidでGIFを画像保存するKotlinコード例を紹介!

1.GifDrawableというライブラリを導入する

Android標準でGIFを扱えるAPIはありません。
だから優秀な外部ライブラリに頼ることにします。

その名も android-gif-drawable というライブラリ

次のGitHubページで公開されています。

▼ Github : koral--/android-gif-drawable

▼ Android Studio : build.gradleに以下を追加

最新バージョンは1.2.24の模様。
ライセンスもMITライセンスだから安心です。

2.GIF動画を外部ピッカーから選択してもらう

ここから具体的なコード部分です。

まずGIF動画をアプリ側で選択させる処理を書きます。

▼ ちょうどこのようなコード例

ここでは ACTION_OPEN_DOCUMENT を使ってます。

▼ ACTION_OPEN_DOCUMENTの扱いについて

AndroidのIntentから複数画像選択を行う【ACTION_OPEN_DOCUMENT】

そしてIntentから外部のファイルピッカーを起動し、その結果を registerForActivityResult()  からURIとして取得しています。

もちろん Activity#onActivityForResult()  を実装してもいいのですが、Kotlinでは registerForActivityResult()  を使って結果を受け取るのがベストな方法みたいです。

3.GIF動画を分割して全フレームを画像保存

最後にGIF動画を分割します。

そして全フレームをPNG画像で保存してみます。

▼ そのために定義したメソッドコード例

何をしているかはコメント参照。

先ほど導入したGifDrawableを使ってURIからGifDrawableに変換、そのあと1枚1枚のフレームをPNG画像として保存しているだけです。

4.実際にGIF動画をフレーム分割保存してみた

ひとまず適当なGIF動画を用意してみました。

▼ URL : http://tsukikoya.com/sample-gif-image/

今回フレーム分割するのに使用したサンプルGIF動画

これを先ほどのコードでフレーム分割。

各フレームをPNG画像として保存を試しました。

▼ 問題なくフレーム分割&保存ができた!

AndroidでGif動画をフレーム画像に分割した結果。このように連番でフレーム画像を保存できた

▼ 当環境では次のディレクトリに保存された

保存先はアプリの外部ディレクトリです。

しっかり全フレーム漏らさず画像保存できてました。