@rabirgoです。
ボディメイク週報に使うスクショをコマンドラインでcrop(切り抜き)して、スクショの大きさを調整する手間を省きたいと思って調べてみました。
現状、Monosnap というアプリでスクショ上端のバーや画面下部の不要な情報を削除しています。1枚1枚丹精込めた手作業でした。
やりたいこと
AutoSleep のスクショの不要部分をサクッと自動で削除して欲しいと思ってます。

sips コマンドではダメでした
Mac OS には sips コマンドというものがあり、画像ファイルを一括でリサイズするような場合に使ったことがあります。
参考:
sips MAN page Man Page – macOS – SS64.com ※https://developer.apple.com/で探してみたけど sips コマンド見つけられませんでした
結論から言うと sips コマンド実現できず、ImageMagick というコマンドラインツールで実現できました。
一応、sips コマンドについて書いておきます。
sips コマンドで調べたこと
「sips crop」で検索すると以下の Stack Overflow 書き込みが見つかりました。
試してみる:画像情報
iPhone X のスクショの大きさは以下の通りです。
$ sips -g pixelWidth -g pixelHeight autosleep-screenshot-raw.PNG
autosleep-screenshot-raw.PNG
pixelWidth: 1125
pixelHeight: 2436
試してみる:切り取る(pixelsH 2436 -> 2392)
manpage には以下のような記述があります。
-c pixelsH pixelsW
–cropToHeightWidth pixelsH pixelsW
Crop image to fit specified size.
$ sips --cropToHeightWidth 2392 1125 autosleep-screenshot-raw.PNG
結果は以下の画像の右側です。

切り取りの始点を指定するような引数がないので 0, 0 からかな?と思ったんですが、どうも切り取った結果が中心になるように動くようですね。0, 0 から切り取るような他のオプションはなさそうです。
0, 0 からなら上下反転しながら出来るんですけどね。仕様なので仕方ない。
ということで、私がやりたいことは sips コマンドではできなさそう です。
参考:sips コマンド使ったワンライナーの例
今は使ってないですが、4年前使ってました。
こんなことに使えますよという一例です。
mkdir -p bak && ls *.[jJ][pP][gG] *.[pP][nN][gG] | while read file ; do echo "mv ${file} bak && sips -Z 600 bak/${file} --out ${file}" | bash -x ; done
bak フォルダを作り、複数の .jpg, .png ファイルを bak フォルダに退避させて、-Z pixelsWH を 600 で指定して出力するというものでした。600 という数字は何となくです。
こうすればできそう(ImageMagick or GraphicsMagick)
StackOverflow には以下の書き込みがありました。
I believe this is not possible, sips is a bit too simple. I would go with ImageMagick or GraphicsMagick installed from Homebrew, even though it adds an extra dependency. Anyway, props for anyone who can find a solution. 🙂
Homeberew というライブラリ管理ツールで ImageMagick か GraphicsMagick インストールしたらいいよ、環境依存が増えるけど解決はするよ、みたいな内容ですね。
なるほど、インストールしてみましょう。
使用しているソフトウェア
ここからちょっと専門的と言える知識が必要かもしれません。(コマンドラインを使ってない方は sips コマンドが既に専門的かもですが)
私が使ってるのは以下です。
- Mac OS Mojave
- MacPorts
Homebrew ではなく MacPorts 使ってます。
MacPorts 使ってる理由は @dankogai さんのこの記事を読んだからです。今思えば私には必要ありませんでしたが。笑
Homebrew に乗り換えるか、Macports で頑張るか の2択からスタートです。
ネット上の情報は Homebrew が多そうですが、そのうち役に立つ日が来るかもしれないので Macports で頑張ります。Macports でも大丈夫そうです。
錆びた Macports を研ぐ
数年前にインストールしてメンテナンスしてないので、こちらの手順に従って Mojave に対応します。手順通りにやれば大丈夫でした。
Developer ツールの更新について
上記手順の中にある xcode-select –install はよくわかりませんでした。
コマンドラインで実行する前に Xcode を起動してみたりしましたが、この手順でダイアログが出て更新されたように見えました。
$ xcode-select --install
xcode-select: note: install requested for command line developer tools

「インストール」を押下しました。
ImageMagick インストール
MacPorts のアップグレードがうまくいったようで
$ sudo port install ImageMagick
でインストールできました。
切り取りのコマンドは?
こんな感じでできました。
$ convert test.PNG -crop '1125x1550+0+0' test-cropped.PNG
実は man コマンドの記述多すぎて読みきれませんでした。
こちらを参考にさせていただきました。ありがとうございます。
実際の流れ
以下の手順で使ってます。
- iPhone でスクショを撮る(複数枚)
- AirDrop で iMac へ送信(ファイル名は IMG*)
- iMac の Download フォルダからブログ画像編集用フォルダへ移動
- bak フォルダ作っておく
- bak フォルダへコピー
- cp IMG* bak
- 上の端と下の端を切り捨て(値は適当)
- sips -c 2250 1125 IMG\*
- リネーム
- AutoSleep 画像だけ下半分を削除
月またぎなし
ls *autosleep* | while read f ; do mv ${f} bak/.; convert bak/${f} -crop '1125x1100+0+0' ./${f}; done
月またぎあり
ls *autosleep* | while read f ; do mv ${f} bak/.; convert bak/${f} -crop '1125x1300+0+0' ./${f}; done
とりあえず「やりたいこと」はできました!
手順はもう少しブラッシュアップできそうです。
さいごに
これで Monosnap での手作業から解放されます。
そもそも手作業で切り抜く範囲を選択しなければならないのが面倒だというのもあるんですが、適当に crop すると大きさがガタガタになって気になったり、ちゃんと大きさを揃えようとするとさらにめんどくさくなったりで何とかならないかと思ってました。
ボディメイク自体は停滞してますが、生産性を上げてボディメイクに充てる時間を捻出したいです。