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!