brew install imagemagick
FRAME_COUNT=59 for (( i = 0; i < ${FRAME_COUNT}; i++ )); do Y=$(expr ${i} \* 40) convert -crop 40x40+0+${Y} +repage bow_anim@2x.png bow_frame_${i}.png done convert -delay 0 -loop 0 -dispose previous bow_frame_*.png bow.gif
convert -crop 40x40
だけだと、切り出した時のフレーム情報みたいなのが保持されて、gifアニメにConvertした時にフレームが上から順に表示されるだけのanimationになる。
convert -crop 40x40+0+${Y} +repage
で、場所を指定して切り抜き&フレーム情報初期化みたいな感じになるので、gifアニメにした時ちゃんと映る。
透過画像を使わない場合は-dispose previous
は指定しなくてもいいかもしれない。
切り抜きと同時に画像をリサイズしたいときは-resize
と-unsharp
指定する。-resize
は、リサイズ後のサイズを指定して、-unsharp
はアンシャープマスクつけてリサイズ後の画像をいい感じにする。
-unsharp ${radius}x${sigma}+${amount}+${thresold}
みたいに指定する。各値の意味とか最適な値とかはよくわからない。
Skypeのbow_anim.pngを上記の方法でgifアニメにしたんだけど、Skype.appみたいにいい感じにならなくて残念だった。