みんな大好きimagemagickの回です。
imagemagickでは convert -resize 幅x高さ in out
のようにして画像をリサイズできるのですが、一部のアニメーションGIFがうまくresizeされず、表示がおかしくなります。
アニメーションGIFはリサイズしたい、しかし表示がおかしくなっては元も子もない、なのでどうしよう……。
結局取った手法は「各フレームごとの画像をリサイズしてアニメーションGIFに戻したらOK」になりました。
後述するようにこの方法は富豪的です。もっといい方法があれば知りたい。
最適化されたGIFアニメで不具合を踏んでるなら、-coalesce で解いて -resize してもう一度 -layer optimize し直すようオプションを並べればいけるかも。(;'-') https://t.co/6E1yWSq6NO
— \助けよや/ (@yoya) November 9, 2019
yoyaさんありがとうございます、同ツイートのスレッドが詳しいのですがどうやらimagemagickのバグらしい……? coalesceしたのちresizeすることは変わらないのですが、引数の順序が違っていたようで、ご指摘の通り修正すると1コマンドで正しくリサイズできました。
手順
magick convert in.gif -coalesce -resize 幅x高さ -layers optimize out.gif
-coalesce
でフレームごとの差分を展開して- リサイズして
-optimize
で再びアニメーションGIFを最適化している
注意
coalesceとresizeを同時にやるとうまくいきません。
画像サイズやフレーム数が多いとimagemagickが死ぬほどリソースを食います。imagemagickのリソースリミットを一時的に上げるとよいと思います。