アプリケーション

手動で位置決めして切り抜き(crop)するのは面倒!ツール導入で一瞬にして完了して週に2分程度のコストとストレスを削減できた話 #ImageMagick

@rabirgoです。

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

Monosnap screenshot tool for Mac and PC with own cloud storage. Take screenshots, record videos and upload files directly to the cloud. Just in one click.

やりたいこと

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 書き込みが見つかりました。

I want to write a batch command script for osx that will crop off the bottom of an image. Is that possible using sips?I have a bunch of images 640 x 1136 and I want crop them (not scale or resiz...

試してみる:画像情報

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 に対応します。手順通りにやれば大丈夫でした。

The MacPorts Project is an open-source community initiative to design an easy-to-use system for compiling, installing, and upgrading either command-line, X11 or Aqua based open-source software on the Mac OS X operating system.

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 コマンドの記述多すぎて読みきれませんでした。
こちらを参考にさせていただきました。ありがとうございます。

# やりたかったことこんな感じで並んでいるローグライク用のモンスター画像を!(https://qiita-image-store.s3.amazonaws.com/0/43772/9842f...

実際の流れ

以下の手順で使ってます。

  • 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 すると大きさがガタガタになって気になったり、ちゃんと大きさを揃えようとするとさらにめんどくさくなったりで何とかならないかと思ってました。

ボディメイク自体は停滞してますが、生産性を上げてボディメイクに充てる時間を捻出したいです。

ABOUT ME
rabirgo
うさぎ年(rabbit)おとめ座(virgo)生まれの rabirgo です。 2019年よりフリーランスとして活動しています。 よかったら Twitter フォローお願いします! Follow @rabirgo

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です