ImageMagickでgifをcropすると余白ができる場合

サムネイル画像作成のために
 「短辺を指定のサイズに合わせて縮小、長辺をトリミング」
という処理をImageMagickで行うと、
 「トリミングしたはずの箇所が余白として残る」
という現象が、gifだけで発生しました。

その解決方法。

  • convertにより、resize→cropを実行しました。
  • 縮小後の画像サイズ指定は、別途計算しています。
  • 出力は別途行っています。

まずresize。

/usr/bin/convert -resize 101x76 [rawfile_path].gif gif:-

ここまでは問題なし。


しかしcropを続けると、トリミングされるべき箇所が余白となって残ってしまいました。

/usr/bin/convert -resize 101x76 -gravity center -crop 76x76+0+0 [rawfile_path].gif gif:-


調べると、類似の現象と解決方法の記事がありましたので、それを参考に +repageを付け加えましたが、解決しませんでした。

/usr/bin/convert -resize 101x76 -gravity center -crop 76x76+0+0 [rawfile_path].gif +repage gif:-


いろいろ試した結果、cropのサイズ指定に強制指定のオプション*1を追加すると、余白残りなしで変換できました。

/usr/bin/convert -resize 101x76 -crop 76x76+12+0! [rawfile_path].gif +repage gif:-
あるいは
/usr/bin/convert -resize 101x76 -gravity center -crop 76x76+0+0! [rawfile_path].gif +repage gif:-

但し、このオプションを追加すると、縦横比の自動計算が行われなくなるので、別途出力サイズを計算しておく必要があります。


参考:

など

*1:wxh+x+y→wxh+x+y!