The DPI number stored in an image file decides nothing about how sharp it prints. What decides it is how many pixels end up across each inch of paper: the image's width in pixels divided by its printed width in inches. That is the effective ppi. Aim for 300 for anything held in the hand (a card, a flyer, a menu) and 150 for a poster read from a metre or more.
So the check is two numbers and a division: the pixel size of the image, and the size it will be printed at.
Print the pixel size, and the DPI tag next to it so you can see it doesn't matter:
magick identify -units PixelsPerInch -format "%f: %w x %h px, stored %[fx:round(resolution.x)] ppi\n" photo.jpg logo.png
photo.jpg: 4032 x 3024 px, stored 72 ppi
logo.png: 600 x 200 px, stored 72 ppi
Then ask the real question, how big each one can be printed:
magick identify -format "%f: %[fx:round(w/300*25.4)] x %[fx:round(h/300*25.4)] mm at 300 ppi, %[fx:round(w/150*25.4)] x %[fx:round(h/150*25.4)] mm at 150 ppi\n" photo.jpg logo.png
photo.jpg: 341 x 256 mm at 300 ppi, 683 x 512 mm at 150 ppi
logo.png: 51 x 17 mm at 300 ppi, 102 x 34 mm at 150 ppi
The phone photo is good for A4 and nearly A3 at 300. The logo, saved from a
website, is good for 51 mm across and no more. Install with
brew install imagemagick on a Mac or apt install imagemagick on Debian.
ImageMagick 6, still the default on Ubuntu, has no magick command: run
identify on its own.
On a Mac, Preview shows the same under Tools › Show Inspector, and on Windows, a file's Properties › Details tab does. Both put the pixel dimensions next to a DPI figure. Read the dimensions.
The arithmetic
An inch is 25.4 mm. Everything follows from that:
- Effective ppi = pixels ÷ (printed mm ÷ 25.4)
- Pixels needed = printed mm ÷ 25.4 × target ppi
- Largest print = pixels ÷ target ppi × 25.4 mm
A 4032-pixel photo across the 297 mm of an A4 page: 297 ÷ 25.4 = 11.69 inches, and 4032 ÷ 11.69 = 345 ppi. Sharp.
The pixels needed for common sizes, rounded up:
| Size | At 300 ppi | At 150 ppi | |
|---|---|---|---|
| Business card | 85 × 55 mm | 1004 × 650 | 502 × 325 |
| A6 postcard | 105 × 148 mm | 1241 × 1749 | 621 × 875 |
| A5 flyer | 148 × 210 mm | 1749 × 2481 | 875 × 1241 |
| A4 | 210 × 297 mm | 2481 × 3508 | 1241 × 1754 |
| A4 with 3 mm bleed | 216 × 303 mm | 2552 × 3579 | 1276 × 1790 |
| A3 poster | 297 × 420 mm | 3508 × 4961 | 1754 × 2481 |
| A2 poster | 420 × 594 mm | 4961 × 7016 | 2481 × 3508 |
| A1 poster | 594 × 841 mm | 7016 × 9934 | 3508 × 4967 |
An image that runs to the edge of the page has to cover the bleed too, 3 mm past every edge, so add 6 mm to both sides of the size before you divide. The bleed guide explains why.
For a sense of scale: a 12-megapixel phone photo (4032 × 3024) fills A4 at 345 ppi, A3 at 244, A2 at 172 and A1 at 122.
A photo is rarely the shape of the page. A 4:3 photo filling an A4 page loses a strip off one side, and so do the pixels in it. Work out the ppi in both directions and take the lower one: for the phone photo on A4 that is 345 across and 366 down, so 345.
Why 300, and why a poster needs less
Normal (20/20) vision resolves about one minute of arc. At 30 cm, the distance you hold a card or a flyer, one arcminute is 0.087 mm, which is 291 dots to the inch. That is where 300 comes from.
Double the distance and the eye needs half the ppi:
| Viewing distance | Finest detail the eye resolves |
|---|---|
| 30 cm (in the hand) | 291 ppi |
| 50 cm (on a desk) | 175 ppi |
| 1 m (a poster on a wall) | 87 ppi |
| 2 m | 44 ppi |
So 150 ppi on a poster is comfortable, with room for the person who walks up close. Below 150 on anything held in the hand, the softness shows. If the printer's spec sheet asks for a number, their number wins.
The DPI tag, and why changing it does nothing
The DPI number in a file only says how big the image should come out if nobody chooses a size. A layout app uses it for the starting size when you place the image without one. The moment you scale the image to fill a frame, the effective ppi is what it is, whatever the tag says.
Changing the number therefore doesn't add a single pixel:
magick photo.jpg -units PixelsPerInch -density 300 photo-300.jpg
magick identify -units PixelsPerInch -format "%f: %w x %h px, stored %[fx:round(resolution.x)] ppi\n" photo.jpg photo-300.jpg
photo.jpg: 4032 x 3024 px, stored 72 ppi
photo-300.jpg: 4032 x 3024 px, stored 300 ppi
Same 4032 × 3024 pixels, same detail, a different label. It's still worth
doing when a printer asks for "300 dpi files" and reads the number, so the
number agrees with the pixels you are sending. ImageMagick saves a JPEG again
to do it, which costs a little quality. exiftool changes only the tag and
leaves the image data alone (it keeps the original as
photo.jpg_original):
exiftool -XResolution=300 -YResolution=300 -ResolutionUnit=inches photo.jpg
1 image files updated
Upscaling doesn't add detail either. Resizing a 1200-pixel image to 2400 pixels makes each new pixel from its neighbours. The image passes every ppi check afterwards, including the ones on this page, and prints exactly as soft as before, only bigger. AI upscalers go further and invent detail that fits, which can pass for foliage or sky and goes wrong on faces, lettering and logos. The honest fixes are a bigger original, a smaller print, or a vector file.
Logos and text: ask for the vector
A logo, a chart or a line of text drawn as vectors is shapes, not pixels. It has no resolution and prints sharp at any size. So when the logo you have is a PNG off a website, don't measure it, replace it: ask whoever owns it for the SVG, PDF, EPS or AI file. The same goes for text: set it in the layout, never as part of a photo.
Check a finished PDF
Once the piece is laid out, check every image in it at the size it was actually
placed. pdfimages from Poppler does it in one line (brew install poppler,
or apt install poppler-utils):
pdfimages -list flyer.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 1200 900 rgb 3 8 jpeg no 1 0 141 141 159K 5.0%
1 1 image 600 200 rgb 3 8 image no 2 0 305 305 6804B 1.9%
1 2 image 4032 3024 rgb 3 8 jpeg no 4 0 1138 1138 3833K 11%
The x-ppi and y-ppi columns are the effective ppi, worked out from where
each image sits on the page. All three images in this test flyer were tagged
72 dpi. In the PDF:
- 141 ppi: a 1200-pixel web image stretched across the A4 page and its bleed, 216 mm. It will print soft on a flyer. This is the one to replace.
- 305 ppi: the 600-pixel logo placed 50 mm wide. Fine, and right at the limit: any bigger and it drops under 300.
- 1138 ppi: the phone photo placed 90 mm wide. More than enough. It only makes the file bigger.
The heading, and a second copy of the logo drawn as vectors, are not in the list at all. Text and vector artwork never are.
In a layout app the same number is on screen. InDesign shows Actual PPI and Effective PPI for the selected image in the Links panel. Affinity Publisher and Scribus both have a preflight check that flags images under a resolution you set.
While you design
Designing in it, badge included, needs no account; the print PDF needs a paid plan. Popcorn's own resolution page walks through where the warnings appear in the editor.
In the browser: crop to the print shape
Crop to the shape you will print, then read the pixels that are left.
The ratio chips (1:1, 4:5, 3:2, 16:9 and their portrait turns) don't include the A-paper shape, 1 : 1.414. For an A-size page, use Free and watch the readout.
- Read the image's size in pixels. Ignore the DPI figure next to it.
- Crop it to the shape it will be printed at, and read the pixels again.
- Divide by the printed size in inches (mm ÷ 25.4), with bleed if it runs to the edge.
- 300 or more for anything held in the hand, 150 or more for a poster. Below that, print it smaller, find a bigger original, or ask for a vector file.
- After layout, run
pdfimages -liston the PDF and read thex-ppicolumn for every image.
The image is only one part of a file a printer will accept. Colours, bleed and the PDF itself are in how to make a print-ready PDF, starting with converting RGB to CMYK.