1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Active StorageのvariantでAnimated GIFを変換する

Posted at

TL;DR

このように書けば、Animated GIFを変換できます。

image.variant(
  loader: { page: nil }, # GIFアニメーションの全フレームを変換する
  scale: '50%', # 1/2の大きさにする
  coalesce: true, # アニメーションシーケンスの最適化
  deconstruct: true, # アニメーションシーケンスの最適化2
  dither: true, '+': true, # エイリアシングを無効化して処理を早くする
  layers: 'Optimize', # GIFアニメーションを最適化
)

コツ

重要なのはloader: { page: nil }というオプションで、variantはデフォルトでは最初の1フレームしか変換を掛けてくれません。なので、pageの指定を無くすことで全フレームに対して変換を掛けます。

coalesceオプションとdeconstructオプションについては、下記のサイトが詳しいと思います。
https://unoh.github.io/2008/12/11/imagemagickgif.html

あとは+ditherというオプションの書き方です。dither: trueと書くと、-ditherというオプションになってしまいます。
今回は+ditherで実行したいので、そういう場合は一度dither: trueと宣言した直後に'+': trueと書くことで、+ditherというオプションにしてくれます。
...combine_options(Rails6から非推奨)で使っていた手法をそのまま持ってきたのですが、このやり方のドキュメントが見つからず苦労しました。正直ここの理屈も分かっていません。分かる方がいらっしゃったら、編集リクエストを送って頂くか、コメントにてご教授頂けると幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?