UPDATE: Use applescript copy small screenshot to clipboard

As we know retina macbook pro or retina 5K iMac have the world’s highest-resolution notebook display. In case of you’re running at the 1440×900@mbp, 2560×1440@iMac effective resolution, using the Cmd+Shift+3/4 native commands would create a double resolution screenshot, the full screen screenshot dimension is 2880×1800@mbp, 5120×2880@iMac, but sometimes we just need a small one.

Here is my solution:

In OS X, there is a command named screencapture, for example run screencapture -i screenshot.png in Terminal, it’s almost the same as Cmd+Shift+4. so we can make a service to the services menu of each application and assign a shortcut. If you assign Cmd+Shift+4 to instead the Native one, then everything looks just like native.

Step 1: Make a service for screenshot

Or you can download this service from github, just go to step 2 after install it. You are welcome to contribute.

  • Start Applications » Automator
  • Select “Service” for the template of the new Automator workflow
  • In the top of the right pane, select “Service receives no input in any application”
  • Drag action “Run Shell Script” from the left pane into the workflow on the right pane
  • Leave Shell at its default “/bin/bash”, and replace the default command cat with the following
# the path where screenshots to save
# if you want to save them to your desktop, SS_PATH should be "/Users/YOURNAME/Desktop"
SS_PATH="/tmp"

# a variable of unix timestamp for screenshot file name
NOW=$(date +%s)

# image format to create, default is png (other options include pdf, jpg, tiff and other formats)
SS_TYPE=PNG

# name of screenshot
SS_NAME=screenshot$NOW

# full path of screenshot file
SS_1X=$SS_PATH/$SS_NAME@1X.$SS_TYPE
SS_2X=$SS_PATH/$SS_NAME@2X.$SS_TYPE

# execute screen capture command and save to $SS_2X
screencapture -i -r -t $SS_TYPE $SS_2X

# check if screenshot is existing
if [ -f $SS_2X ]; then

    # get the 50% width of screenshot by sips
    WIDTH=$(($(sips -g pixelWidth $SS_2X | cut -s -d ':' -f 2 | cut -c 2-)/2))

    # scale down by sips
    sips --resampleWidth $WIDTH $SS_2X --out $SS_1X
    
    # copy small one to clipboard by applescript
    # if you hold control key when do capture, causes screen shot 2X to go to clipboard
    osascript -e 'set the clipboard to (read (POSIX file "'$SS_1X'") as «class PNGf»)'
	
	rm -rf $SS_PATH/screenshot$NOW@2X.$SS_TYPE
fi
rm -rf $SS_PATH/screenshot$NOW@1X.$SS_TYPE
  • click the Run button to test
  • Hit Cmd-S to save. The name you type will be the name in the Services menu. The workflow will be saved in ~/Library/Services.

Step 2: To assign a keyboard shortcut:

  • Open System Preferences » Keyboard » pane Keyboard Shortcuts
  • Select “Services” in the left pane
  • Scroll down to General in the right pane
  • Double-click to the right of the Automator workflow you just created
  • Press the keys you want to use, and switch panes to ensure the new shortcut is saved

I have assigned Cmd+Shift+4 to it, and assigned Cmd+Shift+5 to the native screenshot command.