Change Image DPI

Set a PNG or JPG to 300 DPI, or any density, for print submissions. The default mode rewrites only the header bytes, so no pixel is re-encoded.

🌐 Español

Drop your files here (.png, .jpg, .jpeg)

🔒 Private by design: your files are processed locally in your browser and never uploaded to any server.

The number a print portal checks is a header field

Almost everyone who searches for this arrives believing that converting an image to 300 DPI improves it. It does not, and understanding why makes the rest of the page obvious. An image is a fixed grid of pixels. The DPI value is a separate note attached to that grid saying how densely to lay those pixels down on paper. Change it and the grid does not move.

A 3000 by 2400 image labelled 300 DPI prints at 10 by 8 inches. Relabel it 150 and the identical pixels print at 20 by 16 inches, spread thinner; relabel it 600 and it prints at 5 by 4, packed tighter. On screen nothing changes, the file size barely moves, and no detail is added or lost. Submission systems ask for 300 because it is a convenient proxy for “big enough to print sharply”, and many check only the header field, which is exactly what the default mode writes.

Where each format keeps its density

The two accepted formats store this in completely different places, which is why they are the two formats this tool handles.

PNG uses a small chunk called pHYs holding pixels per metre on each axis plus a unit byte. If one is already present it is replaced; if not, a fresh one is inserted immediately before the first image-data chunk, where the specification says it belongs, and its checksum is computed properly so the file stays valid.

JPEG keeps density in the JFIF segment near the start of the file, as dots per inch. When a well-formed segment exists, only three values inside it are overwritten, the units byte and the two density fields, leaving the version bytes and any embedded JFIF thumbnail exactly as they were and the segment the same length as before. JPEGs often also carry Exif resolution tags, which some software (Photoshop among them) prefers over JFIF. Where those tags already exist they are patched to the same value in place, so the two sources cannot disagree and make the edit look like it failed.

Setting the density across a batch

  1. Drop your PNGs and JPGs on the box or click Choose files. More than one file is fine, and files that are not .png, .jpg or .jpeg are refused with a message naming them and listing what is accepted.
  2. Pick a New DPI. It starts on 300 DPI (print standard). Choosing Custom value makes the custom field below the one that counts; it takes anything from 1 to 10000.
  3. Leave Mode on the metadata-only choice unless a portal has specified a physical size in inches or centimetres as well as a density.
  4. Click Change Image DPI, then take each file from its own download link. Each one is renamed with the density, so scan.png comes back as scan-300dpi.png.

Resample mode rebuilds the pixel grid instead

Some submissions specify both things at once, for example 2 by 2 inches at 300 DPI. If your pixel count does not already produce that physical size at that density, no header edit can fix it and the grid itself has to change. The second choice in the Mode select does what the resample checkbox in a desktop editor does: it holds the physical print size constant and recalculates the pixel dimensions, scaling each edge by the ratio between the new density and the file’s current one.

Be clear-eyed about what that buys you going upward. Tripling each edge means nine times the pixels, all of them interpolated from the ones you had, so the result is larger and smoother but carries no more real detail than the original. Going downward it behaves like an ordinary downscale. If your actual requirement is a pixel size rather than a density label, Resize Images is the more direct tool, and it takes a target width or a percentage across a batch with the aspect ratio kept.

Metadata that survives, and metadata that does not

Every step described here runs in your browser’s own memory, with no file sent anywhere, which matters for the passport photos, ID scans, manuscripts and client artwork that make up most print-prep work. What differs between the two modes is how much of your file comes out the other side.

In the default mode nothing is decoded: the file’s own bytes are copied through and only the density fields change, so camera model, capture date, GPS coordinates, exposure settings, colour profile and the compressed image data itself are all untouched, and a JPEG suffers no generation loss at all.

Resample mode cannot make that promise. Redrawing pixels means the image is decoded onto a canvas and encoded again by the browser, and that process keeps the picture and discards everything else attached to it. Exif and colour profile do not survive the round trip, and a JPEG is re-compressed at the browser’s own default quality, which is not adjustable here. If a photo’s metadata matters to you, check what it is carrying first with the EXIF Metadata Viewer, and prefer the metadata-only mode wherever the portal allows it. The rest of the image tools cover the cropping, compression and conversion steps that usually surround a print submission.

One last practical note on batches: the files are processed one after another and there is no per-file safety net, so a file that turns out not to be a real PNG or JPEG inside, whatever its extension says, ends the entire run. Nothing downloads in that case, not even the files that had already converted. With a large batch of mixed-provenance images it is worth running a couple through first.

See it in action

Screenshot of the Change Image DPI tool with sysfenix-sample.png (466 KB) loaded, New DPI set to 300 DPI (print standard), Custom DPI, used only when "New DPI" is "Custom value" set to 300
Change Image DPI mid-process: sysfenix-sample.png (466 KB) loaded, New DPI set to 300 DPI (print standard), Custom DPI, used only when "New DPI" is "Custom value" set to 300.
Screenshot of the Change Image DPI result screen showing sysfenix-sample-300dpi.png ready to download (466 KB)
The finished result: sysfenix-sample-300dpi.png ready to download (466 KB). The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

I set my photo to 300 DPI and it still prints tiny. What went wrong?

Nothing went wrong; the density number alone cannot make an image bigger. Printed size is pixel count divided by density, so an image 3000 pixels wide prints 10 inches wide at 300 DPI and 2 inches wide at 1500 DPI. If a portal wants a 5 by 7 inch print at 300 DPI, it needs 1500 by 2100 pixels of real image data, and no header value substitutes for pixels that are not there. Check the pixel dimensions your submission actually requires before assuming the density field is the problem.

If I set a PNG to 300 DPI and read it back, will it say exactly 300?

Almost, and the gap is a rounding artefact of the format rather than a mistake. PNG stores density as whole pixels per metre, not per inch, so 300 DPI is written as 11811 pixels per metre. Converting that back gives 299.9994 DPI, which any reader rounds to 300, and the error is far too small to affect any printed output. JPEG has no such issue, because its JFIF field stores dots per inch directly as a whole number.

My camera JPEG had no JFIF header at all. What did the tool put in it?

A standard minimal JFIF segment, 18 bytes long, inserted immediately after the file's start-of-image marker, which is the position the JFIF specification requires. It declares version 1.02, units of dots per inch, your chosen density on both axes, and no embedded thumbnail. This is the ordinary, compatible fix for camera files that carry only an Exif segment. That Exif segment keeps its place after the new one and none of its bytes move, but it is not left entirely alone. Where it already carries XResolution, YResolution and ResolutionUnit tags, those three are rewritten in place to the density you chose, so the two headers cannot end up disagreeing.

Does the tool add Exif resolution tags to a photo that has none?

No. It patches XResolution, YResolution and ResolutionUnit when those tags already exist, because that can be done without changing the length of a single field, and it leaves them absent when they are absent. Adding new tags would mean rebuilding the whole Exif directory, and a rebuild risks dropping fields the tool does not recognize. For a file with no Exif resolution tags, the JFIF header is on its own sufficient, and every reader falls back to it.

What density does resample mode assume if my file does not declare one?

96 DPI, the screen convention. Resample works by scaling each edge by the ratio of your new density to the file's current one, so it needs a current value to work from. A file with no density header anywhere gets treated as 96, which means asking for 300 on such a file multiplies each edge by just over three. Worth knowing before you resample something with no metadata, because the pixel count grows by roughly ten times.

My resample attempt failed instead of producing a file. What is the ceiling?

10000 pixels on either edge. Browser canvases become unreliable well before their theoretical limits, so the tool refuses rather than handing you a corrupt or blank image, and because a failed run stops the whole batch you get no downloads at all rather than a partial set. The on-screen message is a generic failure notice; the specific reason is written to the browser console. The metadata-only mode has no such ceiling, since it never decodes the picture.

Related tools