76

I recently got a retina display MacBook, and all my screenshots (via ⌘ CMD+⇧ SHIFT+3 or ⌘ CMD+⇧ SHIFT+4) end up being twice the size compared to how they appear on-screen.

For example, here is a screenshot of the Ask Different logo taken via ⌘⇧4 on a retina MacBook Pro running macOS 10.15.7:

enter image description here

When the file is opened locally in Preview or Quick Look, it appears at the same size as the website's logo. But when uploaded to the web, it displays twice as big.

How can I stop this from happening?

0

12 Answers 12

32

Here is the most convenient solution (Taken from http://www.quora.com/How-can-I-get-my-retina-Mac-to-not-take-screenshots-that-are-too-big and modified a bit)

Use OsX embedded Automator to downsize screenshots automatically after they taken.

  1. Open /Applications/Automator
  2. Create a "Folder Action"
  3. At the top of the window, where it says "Folder Action receives file and folders added to", select "Desktop"
  4. From the panel on the left, select "Files & Folders" and drag the item "Filter Finder Items" to the right panel.
  5. Add the following conditions to the Filter Finder Items action: Name begins with "Screen Shot"; Kind is image.
  6. (Optional step: if you want to keep copy of originals) - From the Actions list on the left, find "Copy Finder Items" and drag it to the panel on the right. Set the destination folder for the image copy (for example: "To: Pictures")
  7. In the Actions library on the left, click on "Photos" and drag the "Scale Images" action to the right panel.
  8. In the Scale Images action, select "By Percentage" from the drop-down and set the value to 50.
  9. Select File > Save and give the Folder Action a snappy name like "Smaller Screenshot Copy"

screenshot

Here is saved workflow file

6
  • 2
    TIL about Automator!
    – Dan Tao
    Sep 13 '17 at 20:53
  • 1
    This seems to be broken in Mojave (at least the beta). I can run this on an individual item and it works, but the automator will not run when a screenshot is taken, possibly because Mojave now immediately brings up an iOS style edit preview in the corner.
    – Stephen
    Sep 6 '18 at 13:25
  • 1
    quick update: It seems that updating to Mojave (at least for me) required me to right click on my folder and setup/activate folder actions under Services (even though I never had to do this before). Once I did that (and disabled corner preview for screenshots) this action is working again.
    – Stephen
    Sep 6 '18 at 15:47
  • Great idea, but what if you have two screens - one is 2x DPI and one is not?
    – David Cook
    Jul 2 '20 at 1:11
  • works like a charm! Aug 27 '20 at 9:31
16

This is how I handle it. It's convoluted, but it works, and doesn't interrupt my screen-grab -> paste workflow wildly... I just screengrab, call an alfred workflow, and then paste.

CMD-CTRL-SHIFT-4 will capture a section of the screen. That section is copied to the OSX clipboard. Then I launch a script in terminal to save the clipboard contents to a temporary file, resize by half (72 dpi is half of 144 dpi), and copy the image back to the clipboard. This requires the use of several utilities - if someone knows of a way to accomplish this same feat with one simple utility please let me know.

I launch this script from Alfred to make it easy to get to:

#!/bin/bash
pngpaste /tmp/ss.png
width=$((`sips -g pixelWidth /tmp/ss.png | cut -s -d ':' -f 2 | cut -c 2-` / 2))
sips -Z $width /tmp/ss.png
impbcopy /tmp/ss.png

pngpaste is on github: https://github.com/jcsalterego/pngpaste. sips comes with OSX. impbcopyis here: http://www.alecjacobson.com/weblog/?p=3816

LifeHacker had an article on sips http://lifehacker.com/5962420/batch-resize-images-quickly-in-the-os-x-terminal that I referenced, as well as this gist: gist.github.com/lanceli/4966207.

For Alfred, I just made a workflow that runs this as a bash script:

/Users/yourusername/bin/shrink_clipboard > /dev/null 2&>1
5
  • I love this, in theory, but for me it either garbles the image or makes it blurry beyond recognition...
    – Dan
    Mar 4 '16 at 14:41
  • 3
    @Ze'ev Try replacing lines 2 and 3 with this: /usr/bin/sips -s dpiHeight 72.0 -s dpiWidth 72.0 /tmp/ss.png
    – tubedogg
    Aug 29 '16 at 21:12
  • Aha ... the issue is actually a "bug" in Google Chrome which resamples images incorrectly. If I paste the same clipboard into Mail.app, it looks just right. So this workaround effectively scales up the image for "sharp" pasting in Chrome, and you can then resize it with the Gmail resize corner... until they fix this...
    – Dan
    Aug 29 '16 at 22:44
  • 2
    @Ze'ev it's not just Chrome. Any app which discards the DPI information will display the image incorrectly. In this case, it's a combination of things - the (other) bug in Chrome causes the image to be resized on top of dropping the DPI info, which makes it look even worse.
    – tubedogg
    Aug 30 '16 at 2:55
  • I found that the following provided the lowest file size without affecting quality: screencapture -ioW $SCREENSHOT && pngquant -f --ext .png --skip-if-larger $SCREENSHOT && impbcopy $SCREENSHOT
    – jsuth
    Jul 4 '17 at 7:39
13

Two workarounds:

  1. If you have a non-Retina external monitor, drag the application window there and take the screenshot. That's what I do most of the time.

  2. This only works in browsers. Press ⌘CMD+- a couple of times to shrink your font to 50%, then screencap.

For instance:

enter image description here

Obviously the layout may change a bit, but it may be ok depending on your needs.

1
  • clever workarounds!
    – Fattie
    Jan 30 '16 at 18:04
9

Your best bet is to use a third party utility like RetinaCapture.

This is quite cumbersome to use, but gives you what you're looking for, and provides the option for generating both 1x and 2x screen captures at the same time, which is helpful if you're building a website:

enter image description here

enter image description here


I expect that there is a setting somewhere to do this (com.apple.screencapture seems the best candidate); but I can't find it.

3
  1. Take screenshot.
  2. Paste screenshot into Evernote.
  3. Copy screenshot from Evernote.
  4. Paste screenshot where intended.
1
  • Nice, I put it in Evernote Helper (in the menubar) and works.
    – huyz
    Aug 14 '17 at 10:43
3

I used a hybrid of Dan Key and JustinParker's answers and created an Automator workflow that executed a bash script.

Automator workflow

This makes a copy of the original file, and it also accepts multiple inputs. Simply export as an application and then drag-and-drop anything into it to get a "non-retina" version of it at 72ppi and half the pixel resolution.

The bash code is:

for f in "$@"
do
    width=$((`sips -g pixelWidth "$f" | cut -s -d ':' -f 2 | cut -c 2-` / 2))
    sips -s dpiHeight 72.0 -s dpiWidth 72.0 -Z $width "$f"
done
1
  • Don't you have to take the max of width and height if you're going to use the -Z option of sips which does this: "Resample image so height and width aren't greater than specified size" ?
    – huyz
    3 hours ago
3

If you are looking for a simple one time solution you can change image size in Preview app (taken from here):

  1. Open the Screenshot in Preview
  2. Select “Adjust Size…” from the Tools menu
  3. Change the Width and Height to 50 percent of the original
  4. Change the Resolution to 72 pixels/inch

Btw, you can see image metadata (dpi, size, etc.) in the Preview app as well, just click Tools > Show Inspector (taken from here).

1

When you say your screenshots "end up" twice the size, I suspect you're sending them to people who are viewing them on non-retina displays. If so, that's to be expected – the pixel density on your display is higher, so when they view a screenshot taken from your machine on theirs, it'll appear physically larger.

One workaround for this, if you're sending the screenshots via OS X Mail, is to set the Image Size setting for attached images to "Large" instead of "Actual Size." That'll scale down the attached image such that it'll appear "normal" when viewed on a non-retina display.

5
  • 6
    There are lots of cases where your retina screenshot will look twice as big, even on your own Retina display. Uploading to any website that ignores the DPI setting, for starters. Mar 2 '15 at 1:59
  • @SteveBennett The PNGs created by taking screenshots don't have DPI information.
    – duozmo
    Jan 18 '16 at 19:31
  • Huh, that's disappointing. Jan 19 '16 at 1:27
  • 1
    No, 72 dpi is standard on the internet. See the clear example I put in to the question (it's amazing you've never noticed this.) The fact that Apple makes the decision to save it at 144 dpi, is just a poor decision by them, for now. (Sure, maybe in 20 years "everyone" will abstract out the DPI concept, as Apple now do. For now it's just totally useless and silly.)
    – Fattie
    Jan 30 '16 at 18:05
  • 1
    "The PNGs created by taking screenshots don't have DPI information" To see the DPI information you need only open in Preview (ie, "double click") and look at the info panel which gives the DPI information.
    – Fattie
    Jan 30 '16 at 18:06
1

use the following addon for firefox

https://addons.mozilla.org/en-US/firefox/addon/screengrab-fix-version/

1
  • 1
    Please add some information what it does etc.
    – Rob
    Sep 30 '14 at 15:01
1

Right Click Automator Workflow Service

There are some great answers here, but I wanted something a little more optional and a little less automatic.

I created a new Service in Automator called Create Non-Retina Version which can be called from right clicking on any image file in Finder.

Here's how it's used:

1. Find retina image.

enter image description here

2. Right click on retina image and find our new Service at the bottom.

enter image description here

3. Non-Retina (50% scaled) image gets generated.

enter image description here

The Result

Default Image:

enter image description here

Non-Retina Image:

enter image description here

The Automator Workflow

It's easy enough to create yourself (man, Automator is a hidden and neglected gem in MacOS) but here is the workflow that you can download and double click to install.

Create Non-Retina Version Workflow

1

Monosnap can do this quite well. There is an advanced setting "Shrink Retina snaps".

It has a similar capture area shortcut ⌥ Option+⌘ CMD+5 which copies the image to your clipboard.

Other than that it can do a lot more, such as screen recordings and directly uploading your screen grabs to the web for easy sharing.

0

I'm using a folder action and a little Perl script. That will rename the original screen shot's file name to something more handy and it will create a 2nd version with the reduced resolution. My setup is that I have a ~/Pictures/Screenshots where the files end up.

Here are the steps to set it up. Of course you have to create the above folder. Then create a .plist file with a contents like

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>some.domain.renamescreenshots</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/you/Library/LaunchAgents/rename-screenshots.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Users/you/Desktop</string>
    </array>
</dict>
</plist>

where the you needs to be your user name. And save this as /Users/you/Library/LaunchAgents/some.domain.renamescreenshots.plist

Note the WatchPaths parameter which specifies where the OS will watch for changes. Here the screen shots end up per default.

In the same folder you create a Perl script like

#! /usr/bin/perl
for my $f (</Users/you/Desktop/Bil*>) {
    if ($f =~/Bil.*(\d{4})-(\d{2})-(\d{2}) um (\d{2})\.(\d{2})\.(\d{2})\.png/) {
      $dest = "/Users/you/Pictures/Screenshots/pic$1$2$3$4$5$6";
      $res = `file "$f"`;
      $res =~ /.* (\d+) x (\d+),.*/;
      $half = $1/2;
      `mv "$f" $dest.png`;
      `/usr/bin/sips -Z $half $dest.png -o $dest.2.png`;
    }
}

which is doing the actual conversion and save it as /Users/you/Library/LaunchAgents/rename-screenshots.sh (like specified in the .plist). Note that again you must be replaced. Also the source /Users/you/Desktop/Bil* must be adjusted. Since it's German they start with Bil (and some more text including a YYYY-MM-DD date format plus the time after the word "um" meaning at). That will be different per country so the path/regex must be adjusted. The destination file name is then formatted as picYYMMDDHHMMSS.png. Finally the sips will create a reduced copy of that file with a "2"-suffix for the name.

To actually start the whole stuff you need to register the service via

launchctl load /Users/you/Library/LaunchAgents/some.domain.renamescreenshots.plist 

That will trigger the script when a screen shot is taken. (unload will unregister the service if you don't need it any more.)

Note The above is likely to cause several pain when installing. I regularly forget how and where to set it up. And the .sh is nonsense as it should be .pl but that's history too. It just works. Orignally (up to this answer) I had the script only for renaming the screen shot. But I got annoyed by the bloated screen shots that I needed for StackOverflow. So I found this sips here and included it.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .