I often take screenshots for my blog post. As for Mac, we can use default screenshot tool using “Cmd + Shift + 3″(See Apple Support page)。

However, the files are saved on desktop and the name is too long such as “Screenshot 2018-09-12 12.28.39.png”.

Of course, we can change the name “screenshot” with the following command;

> defaults write com.apple.screencapture name "(new name)"
> killall SystemUIServer

We can also change the location of saved file with the following command; 

> defaults write com.apple.screencapture location "(new location)"
> killall SystemUIServer

However, I want to customize the location and the name more flexible such as “20180912013941.png” (I don’t need hyphen, dot, and space). 

I realized it using “screencapture” command and Automator. 

screencapture command

We can take screenshot using the command “screencapture” in terminal. You can see the help with the following command.

> screencapture -h

You can take screenshot with “screencapture -option filename”.

The options I needed are 

  • i : interactive mode (the same as “Cmd + Ctrl + 4”)
  • o : no shadow of the window

The filename is realized by “/path-to-dir/$(date +%Y%m%d%H%M%S)”. For example, I want to save the file to the “Screenshots” directory in Dropbox. So, I write “/Users/ky/Dropbox/Screenshots/$(date +%Y%m%d%H%M%S)”. The important thing is you should untick “share screenshot of Dropbox”. If you didn’t, you would have a bad influence; ex. the file name was not changed, etc.

For Retina – change the size of picture into half (sips)

The display of MacBook Pro is Retina, and I use it with the default resolution. So, the size of the captured image is twice. It’s too large for blog. So the half size is the best. We can change the size with “sips” command.

Get the size of captured image

You can get the width [px] with the following command:

> sips -g pixelWidth (filname)

Change the size of image

You can change the size of image with the following command:

> sips --resampleWidth (width[px]) (filename)

Change the size into 1/2 using the upper 2 commands

You can change the size into 1/2 using the following command:

fname="/Users/ky/Dropbox/Screenshots/"$(date +%Y%m%d%H%M%S)".png"
screencapture -io $fname
sips --resampleWidth $(sips -g pixelWidth $fname | sed 1d | awk '{x=$2;x=x/2;print x}') $fname

As for the line 3, when you run “sips -g pixcelWidth $fname”, you get the following output:

> sips -g pixelWidth 20180912145326.png
/Users/ky/Dropbox/Screenshots/20180912145326.png
  pixelWidth: 530

We don’t need the first line and delete it with “sed 1d” command. We get the width value “530” with “awk ‘{x=$2;x=x/2;print x}'” command, divide it by 2, and output the value. The value is given to the argument of “sips –resampleWidth”. Finally, the size of image is changed into 1/2. (Please let me know the better way.)

Automator

Make the service with Automator, and assign it to the shortcut key.

Run Automator, and choose “Service”.

  1. Select “Utilities”→”Run Shell Script” and drag and drop to the right side.
  2. Choose “no input” for Service receives.
  3. Write down the upper script in “Run Shell Script”
  4. Try it with the upper right button “Run”. If success, save the service with the appropriate name. I save it as “MyScreenshotForRetina”.

Assign it to shortcut key

You can find your service by “Preference  -> keyboard -> shortcut -> services”. 

You can assing the favorite shortcut key.  I assign “Cmd + Shift + 7”.

(“Cmd + Shift + 5” is used for Skitch, and “Cmd + Shift + 6” is used for Touch bar.)

Summary

I summarize the way to customize screenshot on Mac. No window screenshot (Cmd + Shift + 4 (+ Space)) in Skitch, and we input the filename for each time. And, I don’t use Skitch every time. So the default screenshot is the most convenient, I think.

 

Appendix

Make service “open the saved image by Skitch”

In the upper service “MyScreenshotForRetina”, we can capture image and save it with any filename and location. Here, I make the service to open the file with Skitch.

We can run Skitch with the following command in terminal:

> /Applications/Skitch.app/Contents/MacOS/Skitch

You can open an image file, if you give the filename as an argument:

> /Applications/Skitch.app/Contents/MacOS/Skitch (filepath)

So, we can realize it if we write down the following script to Automator.

fname="/Users/ky/Dropbox/Screenshots/"$(date +%Y%m%d%H%M%S)".png"
screencapture -io $fname
sips --resampleWidth $(sips -g pixelWidth $fname | sed 1d | awk '{x=$2;x=x/2;print x}') $fname
/Applications/Skitch.app/Contents/MacOS/Skitch $fname

However, it has one problem. If you execute Skitch in terminal, the upper service is not finished if you just close the window. You should quit Skitch. If you don’t quit Skitch, many Skitch will run every time you use the service. The service is not finished and it is not good. Every time you should quit Skitch with “Cmd + Q”.

Categories: memo

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

blogの記事を書いたりする際に画面のスクリーンショットをよく撮ります。Macだと「Cmd + Shift + 3」などのデフォルトのショートカットキーを使ってスクリーンショットを撮ることができます(詳細はAppleのサポートページで)。

ただ、デフォルトのままだとデスクトップに保存され、さらに名前も「スクリーンショット 2018-09-12 12.28.39.png」のように長ったらしくなってしまいます。

もちろん、

> defaults write com.apple.screencapture name "(変更したい名前)"
> killall SystemUIServer

で、”スクリーンショット”の部分を変更できますし、

> defaults write com.apple.screencapture location "(保存したい場所)"
> killall SystemUIServer

で、保存場所を変えることもできます。

でも、個人的には、デスクトップ以外の特定のディレクトリに「20180912013941.png」とスッキリした名前で一発保存したいわけです(日時の間のハイフン、スペース、ドットを削除したい)。

screencaptureコマンドとAutomatorで実現したのでその時のメモです。

screencaptureコマンド

Macにはターミナルから、”screencapture”コマンドを実行してスクリーンショットを撮ることができます。下記コマンドでヘルプが見れます。

> screencapture -h

“screencapture -オプション 保存ファイル名”で実行できます。

私が必要なオプションは、

  • i : インタラクティブモード(Cmd + Ctrl + 4と同じ)
  • o : 影をつけない

です。保存ファイル名は”/path-to-dir/$(date +%Y%m%d%H%M%S)”で実現できます。DropboxのScreenshotsディレクトリに保存したいので、”/Users/ky/Dropbox/Screenshots/$(date +%Y%m%d%H%M%S)”とします。ちなみに、Dropboxの”スクリーンショットの共有”をOFFにしておく必要があります。ファイル名が変更されなかったりと悪さをします(ハマりポイント)。

Retina対策 – 画像を半分のサイズにする (sips)

MacBook ProのディスプレイはRetinaで、解像度はデフォルトで使用しているので、screencaptureでキャプチャした画像は2倍の解像度を持ちます。blogにアップするとめっちゃでかい(汗)。なので、画像のサイズを半分にするのがちょうどいいのです。画像の編集をするコマンド”sips”を使います。

キャプチャした画像のサイズを取得

> sips -g pixelWidth (filname)

で画像の横幅(px)を取得できます。

画像を縮小

> sips --resampleWidth (width[px]) (ファイル名)

上記を組み合わせて画像を1/2に縮小

fname="/Users/ky/Dropbox/Screenshots/"$(date +%Y%m%d%H%M%S)".png"
screencapture -io $fname
sips --resampleWidth $(sips -g pixelWidth $fname | sed 1d | awk '{x=$2;x=x/2;print x}') $fname

とすれば、1/2にリサイズされた画像を取得できます。

3行目を詳しく説明すると、”sips -g pixcelWidth $fname”を実行すると、出力が下記のようになります。

> sips -g pixelWidth 20180912145326.png
/Users/ky/Dropbox/Screenshots/20180912145326.png
  pixelWidth: 530

出力の一行目は不要なので”sed 1d”で一行目を削除、2行目の横幅”530″という値を”awk ‘{x=$2;x=x/2;print x}'”で取得した後、2で割って出力しています。この値を”sips –resampleWidth”の引数として与えてあげることで半分のサイズに縮小しています。(もっといい方法あったら教えてください。)

Automatorでサービス化

Automatorをつかって上記のコマンドをサービス化し、ショートカットキーで実行できるようにします。

Automatorを起動して”サービス”を選択します。

  1. “ユーティリティ”→”シェルスクリプトを実行”を右側にドラッグします。
  2. 上の”サービスは次の項目を受け取ります”を”入力なし”に
  3. その下側、シェルスクリプトを実行の部分に、上記のスクリプトを記載します。
  4. 右上の実行ボタンでうまく動くか確認して、問題なければ適当な名前をつけて保存します。私は”MyScreenshotForRetina”としました。

ショートカットキーに登録

“システム環境設定 → キーボード → ショートカット → サービス”とたどっていくと、一番下の方に”一般”という項目があって、上で保存したサービスがあります。

ショートカットキーを追加を選んで、好きなショートカットキーを登録します。他のショートカットキーに習って「Cmd + Shift + 7」としました。

(「Cmd + Shift + 5」はSkitchに取られているし、「Cmd + Shift + 6」はTouch barのスクリーンショットに取られています。)

まとめ

以上、Screenshotを自分好みにカスタマイズする方法をまとめました。Skitchだとウィンドウのスクリーンショット(「Cmd + Shift + 4 (+ Space)」に相当するもの)がありませんし、ファイル名も都度自分でつけないといけません。Skitchで編集するまでもないことも多いので、やっぱりデフォルトのScreenshotをカスタマイズするのが便利という結論にいたりました。

 

おまけ

上記で保存したファイルをSkitchで開くところまでをサービスとして登録する

上記のMyScreenshotForRetinaでは、画像を保存するところまででしたが、その後にSkitchで開くところまでを自動化することができるかというお話。

Skitchはターミナルから下記のコマンドを打つことで開くことができます。

> /Applications/Skitch.app/Contents/MacOS/Skitch

上記コマンドの後ろにファイル名を引数として与えることで、ファイルを開くことができます。

> /Applications/Skitch.app/Contents/MacOS/Skitch (filepath)

ということで、Automatorのシェルスクリプトに下記を書き込むことで実現が可能です。

fname="/Users/ky/Dropbox/Screenshots/"$(date +%Y%m%d%H%M%S)".png"
screencapture -io $fname
sips --resampleWidth $(sips -g pixelWidth $fname | sed 1d | awk '{x=$2;x=x/2;print x}') $fname
/Applications/Skitch.app/Contents/MacOS/Skitch $fname

ただし、上記には問題点があります。Skitchをコマンドから実行した場合、Skitchを終了しない限り(ウィンドウを閉じるだけじゃ駄目)、上記のサービスが終了しません。なので、スクリーンショットを撮るごとにSkitchを終了させておかないと、Skitihが複数立ち上がることになります。サービス自体も終了できず立ち上がりっぱなしになるので、それもよくありません。毎回「Cmd + Q」でSkitchを終了する人は使ってもいいかもしれません。

Categories: memo

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.