PNG to JPG converter
Convert PNG images to JPG format
PNG stores every pixel exactly and carries an alpha channel; JPG approximates detail in 8x8 blocks and has no alpha at all. This page bridges the two by decoding your PNG with the browser's own decoder, painting a white rectangle onto a canvas, drawing the PNG over it and re-encoding that canvas as JPEG at the quality you pick. The white step is the part people are surprised by: anything transparent comes out solid white rather than see-through. The rest is a straight trade of file size against block artifacts, and the slider decides where you land.
Key facts about PNG to JPG converter
| What changes | PNG's lossless deflate stream is discarded and the pixels are re-encoded as JPEG DCT blocks - a re-encode, not a repackage. |
|---|---|
| Transparency | The canvas is filled #FFFFFF before your PNG is drawn, so transparent pixels become white and semi-transparent ones become colour blended into white. |
| Quality setting | The 30-100 slider is handed straight to the JPEG encoder; 90 is the default and keeps screenshot text readable. |
| Typical size delta | A 1920x1080 interface screenshot of roughly 450 KB as PNG lands near 150-220 KB as JPG at quality 90. |
| Worst case for JPG | Sharp text, hairlines and flat colour blocks pick up ringing halos along their edges - the screenshot-saved-as-JPEG look. |
| Metadata | No EXIF, ICC profile or XMP packet reaches the JPG; the encoder starts from bare canvas pixels. |
| Optional downscale | Max-dimension presets of 3840, 2560, 1920, 1280, 800, 480 and 200 px resize before encoding, which saves more bytes than lowering quality. |
| Size ceiling | 500 MB per file on paper, but the canvas is the real limit - Chrome stops near 16,384 px on a side and iPad Safari much earlier. |
What happens to your file
Your PNG becomes a blob: URL, an <img> element decodes it with the browser's built-in PNG decoder, a <canvas> in this tab receives the pixels, and canvas.toBlob with the image/jpeg type produces the result. Those are four browser APIs running on your own CPU: no Pages Function, no API endpoint, no request carrying image bytes anywhere. The download link points at another blob: URL in the same tab, and a multi-file ZIP is assembled in page memory.
About this tool
- 1
Add the PNG files
Drop up to 20 PNGs or browse for them. Anything that is not .png is rejected with a toast before decoding starts.
- 2
Set the quality
The slider starts at 90. Under about 70 the blocking shows on flat backgrounds; over 95 the file grows fast for almost no visible gain.
- 3
Downscale if the target has a size cap
Halving the longest side removes roughly three quarters of the pixels, which beats any quality reduction.
- 4
Convert, then check the white areas
Open the side-by-side view and confirm nothing you wanted transparent turned into a white box, then download the .jpg or the ZIP.
| Input and output | Takes .png only (image/png) and returns .jpg with the image/jpeg type; any other extension is refused before decoding. |
|---|---|
| Conversion path | PNG to JPG runs in three steps: an <img> element hands the file to the browser's own PNG decoder; the pixels land on a 2D canvas in this tab; then canvas.toBlob with the image/jpeg type returns the finished file. |
| Browser support | The PNG side decodes in every browser ever shipped, while writing the JPG is just as universal, since every canvas implementation encodes JPEG. |
| Controls for this pair | A 30 to 100 quality slider (steps of five, default 90) drives the JPG encode, max-dimension presets from 3840 down to 200 px resize the PNG first, and the strip-metadata toggle is moot on this pair. |
| Batch, caps and naming | Twenty PNG files per run at 500 MB each; one result downloads as a single JPG, several as converted-jpg-files.zip, zipped by JSZip 3.10 in page memory. |
| Device ceiling | The canvas caps it: past roughly 16,384 px a side Chromium refuses the bitmap and iPhone Safari gives up sooner, so an oversized PNG fails before any JPG bytes exist. |
- A logo on a transparent background will show a white rectangle on any coloured page - keep the PNG for that, or convert to WebP instead.
- A photo exported as PNG by a design tool is the ideal input here: PNG is storing camera noise losslessly and JPG discards precisely that.
- The estimated output under the slider is a rough curve; the measured size appears beside the result after conversion.
- If EXIF or the embedded ICC profile has to survive, this canvas route cannot deliver it - only pixels cross into the JPEG.
- Shrinking a folder of PNG screenshots before attaching them to a bug report or a mail thread with a size cap.
- Meeting an upload form that accepts JPG only, such as older job portals and some print-order sites.
- Getting design-tool PNG exports of photographs down to a size a CMS will accept.
Related tools
View allNeed the opposite? Try JPG to PNG
Works well with this4
Other JPG tools12
Updated