私が歌川です

@utgwkk が書いている

imagemagickで富豪的にアニメーションGIFをリサイズする

みんな大好きimagemagickの回です。

imagemagickでは convert -resize 幅x高さ in out のようにして画像をリサイズできるのですが、一部のアニメーションGIFがうまくresizeされず、表示がおかしくなります。 アニメーションGIFはリサイズしたい、しかし表示がおかしくなっては元も子もない、なのでどうしよう……。

結局取った手法は「各フレームごとの画像をリサイズしてアニメーションGIFに戻したらOK」になりました。 後述するようにこの方法は富豪的です。もっといい方法があれば知りたい。

yoyaさんありがとうございます、同ツイートのスレッドが詳しいのですがどうやらimagemagickのバグらしい……? coalesceしたのちresizeすることは変わらないのですが、引数の順序が違っていたようで、ご指摘の通り修正すると1コマンドで正しくリサイズできました。

手順

magick convert in.gif -coalesce -resize 幅x高さ -layers optimize out.gif

  • -coalesce でフレームごとの差分を展開して
  • リサイズして
  • -optimize で再びアニメーションGIFを最適化している

注意

coalesceとresizeを同時にやるとうまくいきません。 画像サイズやフレーム数が多いとimagemagickが死ぬほどリソースを食います。imagemagickのリソースリミットを一時的に上げるとよいと思います。

参考