Why Is My PNG Bigger Than the JPG? (Measured, With Fixes)
You converted a 1.5 MB photo from JPG to PNG and got a 15 MB file. Nothing went wrong. That growth is the expected result of moving from a lossy format to a lossless one, and the size of the jump depends heavily on what is in the image and which PNG encoder was used.
We measured it, so this guide works with real numbers rather than rules of thumb.
The one-sentence explanation
A JPG stores an approximation of the image that has been tuned to be small; a PNG stores the exact pixels, and the exact pixels of a photo contain a lot of fine noise that cannot be compressed well.
Why photos grow so much
PNG compression works by predicting each pixel from its neighbours (left, above, upper-left) and storing only the difference, which is then packed with the same DEFLATE algorithm used in ZIP files. When predictions are good, differences are mostly zero and compress to almost nothing.
In a photo, predictions are rarely exact. Camera sensors add random noise to every pixel, skin and foliage have fine texture, and gradients never land on round numbers. Even the JPG’s own compression adds a faint pattern of 8×8 block edges. PNG must preserve all of it, so the differences it stores are small but rarely zero, and they compress poorly.
Graphics are the opposite case. A screenshot has long runs of identical pixels, so PNG predicts them perfectly.
Measured: how much bigger?
We converted test JPGs (quality 80–90) with our converter in Chrome. “Browser PNG” is what you get from the browser’s built-in encoder, which most online converters use; “optimised PNG” is the same pixels after lossless optimisation with oxipng.
| Image | JPG | Browser PNG | Optimised PNG | Saved by optimising |
|---|---|---|---|---|
| Phone photo, 12 MP (4032×3024) | 1.58 MB | 15.68 MB | 9.26 MB | 41% |
| Landscape photo, 4K | 1.02 MB | 10.99 MB | 6.88 MB | 37% |
| Photo, 1080p | 337 KB | 3.09 MB | 2.06 MB | 33% |
| Web photo, 1200×675 | 124 KB | 1.26 MB | 869 KB | 33% |
| App screenshot, 1080p | 114 KB | 270 KB | 142 KB | 47% |
| Logo on white, 1000×1000 | 32 KB | 198 KB | 122 KB | 38% |
| Product shot on white, 1600×1600 | 50 KB | 367 KB | 164 KB | 55% |
The converter applies “Compress PNG” automatically to images up to 6 megapixels to keep large photos fast. The optimised figures for the 12 MP and 4K photos come from running the same optimiser on them separately (9–15 seconds each); in the converter those two files use the browser encoder.
Three things stand out:
- Photos grow 6–10× depending on the encoder. Higher-resolution photos tend to compress a little better per pixel.
- Flat graphics grow much less: the screenshot ended up only 1.2× its JPG size once optimised.
- The encoder matters a lot. The browser’s built-in PNG encoder favours speed; optimising exactly the same pixels made the files 33–55% smaller.
Why browser PNGs are larger than they need to be
Browsers use the canvas API to create PNG files, and that path is designed to be fast: it picks a moderate DEFLATE compression level and a single, simple strategy for predicting pixels. A PNG optimiser such as oxipng instead tries several prediction filters per row, several compression strategies, and drops unnecessary data (for example, an alpha channel that is fully opaque everywhere, or a 24-bit colour mode when the image only uses a few hundred colours).
As a cross-check, we compressed the same decoded pixels with the image library sharp at two settings:
| Image | zlib level 6 | Level 9 + adaptive filtering |
|---|---|---|
| Photo, 1080p | 3.17 MB | 1.12 MB |
| App screenshot, 1080p | 206 KB | 98 KB |
| Logo on white | 147 KB | 73 KB |
Same pixels, same lossless format, two to three times difference in size. That is why our converter includes a “Compress PNG” option that runs oxipng in your browser (on images up to 6 megapixels, where it finishes in a few seconds).
Four ways to get a smaller PNG
1. Optimise losslessly (no quality change)
Run the PNG through an optimiser: oxipng, pngcrush, OptiPNG, or the “Compress PNG” switch in our converter. This never changes a pixel. Expect 30–55% savings over a browser-made PNG.
2. Reduce to a colour palette (small, visible-only-on-photos change)
A normal PNG stores up to 16.7 million colours. A palette PNG (also called PNG-8) stores at most 256, chosen to match the image, plus dithering. For logos, icons and screenshots the difference is usually invisible:
| Image | Optimised full-colour PNG | Palette PNG (256 colours) |
|---|---|---|
| App screenshot, 1080p | 98 KB | 53 KB |
| Logo on white | 73 KB | 45 KB |
| Photo, 1080p | 1.12 MB | 911 KB |
On photos, 256 colours can cause visible banding in skies and skin, and the saving is small anyway. Tools like TinyPNG and pngquant do this conversion.
3. Resize before converting
File size scales with pixel count. Halving the width and height of an image leaves a quarter of the pixels and roughly a quarter of the file size. If your 12 MP photo will only ever be shown 1200 pixels wide, resize it first.
4. Ask whether you need PNG at all
If the image is a photo and you don’t need transparency or lossless editing, JPG is the right container and PNG will always be several times larger. For websites, WebP and AVIF can store photos in lossless or lossy form, with transparency, at a fraction of PNG’s size. Our JPG vs PNG guide has a table of which format to use when.
Does a bigger file mean better quality?
No. The PNG holds exactly the pixels that were decoded from the JPG. The extra megabytes record those pixels without approximation; they do not add detail that the JPG had discarded. See Does converting JPG to PNG improve quality? for a test of what PNG does protect.
How we tested
- Images: a 4K aerial landscape photograph resized to 12 MP, 4K, 1080p and 1200×675; a synthetic 1080p dashboard screenshot; a synthetic logo on white; a synthetic product shot with a soft shadow. All saved as JPG at quality 80–90 (typical camera and export settings).
- Conversion: our converter in Chrome on macOS. “Browser PNG” uses the canvas encoder; “optimised PNG” uses oxipng level 2 via WebAssembly.
- Cross-check: the same JPGs decoded and re-encoded with sharp (libvips/libspng) at zlib level 6 and level 9 with adaptive filtering, and as 256-colour palette PNGs.
Your numbers will differ with image content, but the ratios above are typical. Try it on your own files: our converter shows the JPG and PNG size for every file, and it never uploads anything.