How to Compress a Screenshot to 10 MB
Make a screenshot pass a 10 MB upload limit without distorted dimensions or unreadable text. Includes Mac, Windows, WebP, and API workflows.
To compress a screenshot to 10 MB, first check its current file size. If it is already below 10 MB, upload it as-is. If it is larger, make a copy, reduce its pixel dimensions proportionally or export it in a more compact format, save it, and verify the saved file is safely below the limit.
You do not need to make the file exactly 10 MB. A strict upload service may reject a file displayed as 10.0 MB because of rounding, so leave some headroom. Always inspect the compressed copy at normal size and zoom in on small text before uploading.
1. Check the screenshot before changing it
Record the original file size and dimensions. This tells you whether compression is necessary and helps you choose the least destructive change.
- macOS: In Finder, select the file and press
Command-Ito view its size. Open it in Preview and choose Tools > Show Inspector for pixel dimensions. - Windows: Right-click the file, choose Properties, and check Size and Dimensions.
- Linux: Use your file manager’s properties dialog or run
identify screenshot.pngif ImageMagick is installed.
Keep the original untouched. Work on a copy so you can return to the full-resolution image if text becomes difficult to read.
2. Choose the right reduction method
| Method | Changes pixels? | Lossy? | Use it when |
|---|---|---|---|
| Resize dimensions | Yes | No by itself | The screenshot has more pixels than the destination needs. |
| Crop | Removes edges | No by itself | Empty margins or irrelevant content can be discarded. |
| Export as WebP or JPEG | No | Usually | The receiving service accepts the format and dimensions must stay the same. |
| Lower quality setting | No | Yes | You need a smaller file and can accept some detail loss. |
For screenshots containing code, fine text, icons, or thin lines, resizing moderately is often easier to inspect than aggressive JPEG quality reduction. If the destination accepts WebP, compare a WebP copy at ordinary viewing size; Google documents WebP’s predictive coding and the cwebp converter for macOS, Windows, and Linux. Google’s WebP overview explains the format and conversion tool.
3. macOS: compress with Preview
- Duplicate the screenshot in Finder and open the duplicate in Preview.
- Choose Tools > Adjust Size.
- Keep Scale proportionally enabled. Reduce the width or height; Preview calculates the other dimension.
- If appropriate, reduce the resolution as well. Avoid a large jump when the screenshot contains small type.
- Choose File > Export and save a new copy. Select PNG when crisp text and transparency matter; try JPEG when the destination accepts it and a smaller file is more important.
- Check the exported file’s actual size in Finder, then zoom into text, icons, and thin lines.
Apple documents resizing, rotating, and cropping in Crop, resize, or rotate an image in Preview on Mac. Cropping can reduce the file when discarded edges are unnecessary.
4. Windows: use PowerToys Image Resizer
- Install Microsoft PowerToys if it is not already available.
- In File Explorer, select the screenshot copy, right-click it, and choose Resize with Image Resizer.
- Select an existing preset or create one with a maximum width or height.
- Choose Fit as the starting behavior. Fit scales proportionally without cropping.
- Use Fill only when cropping to a fixed box is acceptable. Avoid Stretch for screenshots because it changes the proportions.
- Save the resized copy, check its file size in Properties, and inspect small text.
Microsoft describes these presets and the Fit, Fill, and Stretch behaviors in Image Resizer utility for Windows.
5. Command-line workflows
ImageMagick: resize proportionally
magick input.png -resize "3000x3000>" output.png
The > qualifier means an image is reduced only when it exceeds the bounding box; its aspect ratio is preserved. Adjust the maximum dimension, then check the resulting file size:
ls -lh output.png
Apply one change at a time. If the output is still over 10 MB, use a smaller bounding box or export a format accepted by the destination.
WebP with cwebp
cwebp -q 85 input.png -o output.webp
ls -lh output.webp
The -q value controls lossy quality. Try a high value first, inspect fine text, and lower it in small steps only if necessary. Do not use this conversion when the receiving service accepts PNG only.
Python: check size and resize a copy
from pathlib import Path
from PIL import Image
source = Path("screenshot.png")
target = Path("screenshot-compressed.png")
limit = 10 * 1024 * 1024
with Image.open(source) as image:
print(f"Original: {source.stat().st_size / 1024 / 1024:.2f} MB")
image.thumbnail((3000, 3000), Image.Resampling.LANCZOS)
image.save(target, format="PNG", optimize=True)
print(f"Saved: {target.stat().st_size / 1024 / 1024:.2f} MB")
if target.stat().st_size > limit:
print("Still over 10 MB: reduce dimensions further or export an accepted alternate format.")
Install Pillow with python -m pip install pillow. The script preserves the aspect ratio and leaves the original file unchanged.
6. A reliable check-and-adjust loop
- Make a copy of the original.
- Choose one change: crop unnecessary edges, reduce dimensions, or test an accepted alternate format.
- Save the copy and measure the actual file on disk. Estimates and preview values are not enough.
- View it at normal size, then zoom in on small text, icons, and one-pixel lines.
- If it is still above the limit, make a smaller adjustment and repeat.
- Stop when it is comfortably below 10 MB and remains readable.
Do not repeatedly recompress the same JPEG or WebP. Return to the original and create a new copy for each attempt to avoid cumulative quality loss.
7. Or skip the browser setup
If you are generating screenshots for uploads, documentation, or automated jobs, ScreenshotNeo returns PNG, JPEG, WebP, or PDF from one GET request. Its capture options include image resizing, full-page capture, element capture, custom CSS and JavaScript, device presets, retina scale, waiting rules, and caching with a TTL you choose. See the ScreenshotNeo API documentation for all parameters.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before capture. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; response headers report the page verdict and whether the shot was billed. Its MCP server lets Claude, Cursor, and other MCP clients use take_screenshot, get_page_info, and capture_pdf. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
8. Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| The file is still over 10 MB | Too many pixels or a lossless format with complex content | Reduce dimensions further, crop unused edges, or test WebP/JPEG if accepted. |
| Text looks blurry | Dimensions or quality were reduced too aggressively | Start from the original, use a larger maximum dimension, or choose a higher quality setting. |
| The image is distorted | Width and height were changed independently | Enable proportional scaling or use Image Resizer’s Fit option. |
| Transparency disappeared | JPEG does not support transparency | Keep PNG or use a format supported by the destination that preserves alpha. |
| The upload rejects the compressed file | The service does not accept its format or has a stricter byte limit | Check accepted formats and leave more headroom below 10 MB. |
| Preview says the file is small enough but upload fails | Displayed units are rounded | Measure the saved file in bytes and export it below the limit rather than targeting exactly 10 MB. |
9. Performance, reliability, and cost notes
- Performance: Resizing reduces both storage and transfer time. For repeated work, create a consistent maximum dimension and quality preset.
- Reliability: Keep originals, use deterministic filenames, and verify the final file after every export. For automated pipelines, fail the job when the byte count exceeds the limit.
- Privacy: Preview, PowerToys, ImageMagick, and
cwebpcan process files locally. Online compressors require uploading the screenshot to a third party. - Cost: Local tools avoid per-image service charges. ScreenshotNeo has a Free plan with 1,000 shots per month and no card; paid plans begin at $5 for 3,000 shots, with every feature available on every plan.
10. FAQ
Should I target exactly 10 MB?
No. Leave a safety margin because upload systems may enforce the limit in bytes while displaying rounded megabytes.
Is PNG or JPEG better for screenshots?
PNG generally preserves sharp text and transparency. JPEG can be smaller but may introduce artifacts around letters and thin lines. Use the format the destination accepts and inspect the result.
Can I compress without changing dimensions?
Yes. Export a copy as an accepted format such as WebP or JPEG, or lower the quality setting. These methods can be lossy, so compare fine details with the original.
Will cropping always reduce the file enough?
No. Cropping removes pixels, but a screenshot with complex content can remain large. Measure the saved copy and continue with a controlled resize or format conversion if needed.
How do I automate the 10 MB check?
After saving the output, compare its byte count with 10 * 1024 * 1024. If it exceeds that value, repeat with a smaller dimension or an accepted lower-quality export.


