84

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?

1
  • Download a screen capture google chrome extension and open up the image in google chrome. Then use the extension instead of the macbook option.
    – Isaac Pak
    Commented Apr 20, 2022 at 14:02

13 Answers 13

33

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

7
  • 2
    TIL about Automator!
    – Dan Tao
    Commented Sep 13, 2017 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
    Commented Sep 6, 2018 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
    Commented Sep 6, 2018 at 15:47
  • Great idea, but what if you have two screens - one is 2x DPI and one is not?
    – David Cook
    Commented Jul 2, 2020 at 1:11
  • works like a charm! Commented Aug 27, 2020 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...
    – d0g
    Commented Mar 4, 2016 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
    Commented Aug 29, 2016 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...
    – d0g
    Commented Aug 29, 2016 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
    Commented Aug 30, 2016 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
    Commented Jul 4, 2017 at 7:39
15

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.

2
  • clever workarounds!
    – Fattie
    Commented Jan 30, 2016 at 18:04
  • This is one reason why I still keep a non-4k monitor. It's extremely annoying for professionals who are in need to make screenshots all the time. Commented Jan 17, 2023 at 16:29
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.

1
  • Surprisingly, there is still not a system option to do that. Commented Oct 13, 2022 at 12:20
4

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).

3
  • But this actually resamples the image throwing away 50% of it. What you want is just to change the resolution to 72 dpi. Commented Apr 14, 2022 at 19:50
  • This is the equivalent to resizing an image in an image editor. You will lose quality.
    – Isaac Pak
    Commented Apr 20, 2022 at 13:42
  • 1
    @PaulJ.Lucas and Isaac Pak, actually this solution is the same as if you will use the following ImageMagick command: magick convert -units PixelsPerInch foo.png -resample 72 bar.png. Yes, the image will become 50% smaller, but it seems to be necessary, isn't it? Otherwise, e.g., if you skip Step-3 of AbstractVoid's solution, when you upload image here on Ask Different, it still will be 2x larger than its original size...
    – user480875
    Commented May 5 at 12:33
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
    Commented Aug 14, 2017 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
    Commented Oct 18, 2021 at 21:06
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
  • 7
    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. Commented Mar 2, 2015 at 1:59
  • @SteveBennett The PNGs created by taking screenshots don't have DPI information.
    – duozmo
    Commented Jan 18, 2016 at 19:31
  • Huh, that's disappointing. Commented Jan 19, 2016 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
    Commented Jan 30, 2016 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
    Commented Jan 30, 2016 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
    Commented Sep 30, 2014 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.

0

For people looking for a simpler to use solution, I wrote a small app that can do this automatically. It's called Clop and it can do both downscaling to 1x (or 72 DPI) and compressing the image.

As soon as you screenshot to clipboard, Clop optimizes the image to both PNG and JPEG and chooses the smallest one. The downscaling feature is disabled by default but can be easily enabled in settings:

Clop downscale to 72 DPI setting

The app uses pngquant to optimise PNGs, jpegoptim to optimise JPEGs, and libvips to do the downscaling/resizing process. You can find the full source code of the app here: https://github.com/FuzzyIdeas/Clop

Disclaimer: the app has a paid upgrade but it's only needed for compressing screen recordings and image files. Clipboard image functions are free.

You must log in to answer this question.

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