【Mac】ターミナルで画像のリサイズ
画像のリサイズ程度のことで、プレビュー.app を立ち上げるのはダルい。
ファイル名を考えるのもダルい。
もっとスパっと簡単にできんものか。という場合にゆきつくのがターミナルである。
sips
macOS の bash でイメージのリサイズをする場合、sips というコマンドが有用だ。
macOS には最初からインストールされている。
--resampleWidth ピクセル数
# 横幅をピクセル数にリサイズする。縦横比は保たれる。
sips --resampleWidth 600 image.png --out resize-image.png
--resampleHeight ピクセル数
# 高さをピクセル数にリサイズ、縦横比は保たれる。
sips --resampleHeight 480 image.png --out resize-image.png
他のオプションについては、この記事で紹介したこともある。
しかし sips のリサイズには不満があったりする。アンシャープマスクをかけられないのだ。
こんな感じにボケでしまう。
imagemagick
やっぱ、bash で画像をイジるなら imagemagick の力を素直に借りるのが良さそう。
Homebrew でインストールできる。
brew install imagemagick
リサイズに関してはこんなふうに書くらしい。
convert input_image.png -resize 600x600 output_image.png
600x600
の x は小文字のエックスだ。縦横どちらか長いほうの辺を 600px にするという意味である。アスペクト比は保たれる。
リサイズについてはシンプルで使いやすい。
問題はアンシャープだ。こんなふうに書くみたいだ。
-unsharp 0x1+1+0.008
# convert ボケたinput.png -unsharp 0x1+1+0.008 キリッとしたoutput.png
0x1+1+0.008
というのはなんなのか。
「半径xディテール+適用量+しきい値」
ということらしいのだが、難しい。このうち最初の半径は 0 にしておくと imagemagick のほうで適切な数値にしてくるとのこと。
面倒くさくない書き方もある。
-sharpen 1
# convert ボケたinput.png -sharpen 1 キリッとしたoutput.png
ざっくりだけど、ブログとかで使うちょっとした画像なら、これでだいたいスッキリする感じ。
resize.sh
自分の使い道にあわせて、以下のようなスクリプトを書いた。
📝 resize.sh
#!/bin/sh
# 画像をリサイズするやつ
# -r 600
# とやれば、幅 600 ピクセルにしてくれる。
# -h
# で半分のサイズにしてくれる。
argcheck='off'
half='off'
for arg in "$@"
do
if test "$argcheck" = 'on'; then
resize="$arg"
argcheck='off'
fi
if test "$arg" = '-r'; then
argcheck='on'
fi
if test "$arg" = '-h'; then
half='on'
fi
if echo "$arg" | grep -sqEi 'jpg|png|jpeg|gif'; then
img="$arg"
fi
done
if test -z "$img"; then
echo 'No Image'
exit 0
fi
if test "$half" = 'on'; then
w=`sips -g pixelWidth "$img" | grep 'pixelWidth' | sed -e 's/pixelWidth\://' -e 's/ //g'`
resize=`echo $((w / 2))`
fi
if test -z "$resize"; then
echo 'Not number'
exit 0
else
ext=`echo ${img##*.}`
imgFile=`echo ${img%.*}`
convert "$img" -resize "$resize"x"$resize" -sharpen 1 "$imgFile"_"$resize"px."$ext"
fi
ちなみに、resize.sh -r 40% image.png
みたいにパーセントでもリサイズできる、はず。
最近のコメント