Convert PNG to JPG — shrink that giant photo PNG instantly
Exported a screenshot of a photo and now it's 10MB? PNG's lossless compression can't exploit the texture redundancy that JPG's DCT encoding captures, so photos balloon. ConvertMyPic converts PNG to JPG entirely in your browser — no upload, no signup, no file size cap from a server.
Convert to JPG →Why convert PNG to JPG?
PNG was designed for lossless compression: screenshots, diagrams, and logos where every pixel must be preserved exactly. But photographs are the wrong use case for PNG. A 4032×3024 photo taken by a modern phone and saved as PNG will be roughly 10–12MB, because PNG's DEFLATE compression can only squeeze repeating byte sequences — and the complex, noise-filled texture of a real photograph has very few of those. JPG's DCT (Discrete Cosine Transform) encoding, on the other hand, models exactly how human vision perceives luminance and chroma, exploiting the redundancy in smooth gradients and fine texture to achieve 5–8x smaller files with no perceptible quality difference at quality 90. If your PNG is a photo, a screenshot of a photo, or any image captured from a camera, it almost certainly belongs in JPG format.
What you lose and what you gain
Converting PNG to JPG is not free — there are two real trade-offs to know about. First, JPG is a lossy format: it discards a small amount of pixel data on encode. At quality 90, this loss is below the threshold of human perception for photographic content, but it is irreversible. Do not discard your original PNG if you anticipate needing to re-edit the image later. Second — and more important to flag — JPG has no alpha channel. If your PNG uses transparency (a logo on a clear background, a screenshot with a transparent UI layer, a product photo with a cut-out background), the transparent pixels will be composited onto a solid background (white by default) when you convert. For transparent PNGs, consider PNG → WebP instead, which preserves the alpha channel while still achieving meaningful compression. If your PNG is a photo with no transparency, neither trade-off applies in practice: you will gain a 5–8x smaller file with no visible difference.
How to convert PNG to JPG
The entire process runs locally in your browser. No server receives your file. Works offline once the page has loaded once:
- Click "Convert to JPG →" at the top of this page, or drag your PNG file onto the drop zone on the homepage.
- ConvertMyPic decodes the PNG using the browser's native PNG decoder — the same decoder that renders every PNG image on the web. This is fast and handles all PNG variants: 8-bit, 16-bit, indexed, grayscale, and RGBA. If your PNG has an alpha channel (transparency), the transparent pixels are composited onto a white background before encode. You will see a preview of the result.
- The decoded image data is passed to mozJPEG — the Mozilla-maintained JPEG encoder compiled to WebAssembly. mozJPEG applies trellis quantization and smarter quantization tables to produce files 5–10% smaller than libjpeg-turbo at the same visual quality setting.
- Click the download button. The JPG saves to your Downloads folder. The filename matches the original with the extension swapped — photo.png becomes photo.jpg.
- Need a different quality level? Open /convert directly to access the quality slider (50–100), an EXIF-strip toggle, and a baseline vs. progressive encoding option. Quality 90 is the recommended default for photos.
File size comparison: PNG vs JPG at different quality levels
Two representative cases: a full-resolution phone photo where JPG always wins, and a 1080p screenshot of UI text where the outcome is more nuanced.
| Source | Format | Quality | File size |
|---|---|---|---|
| 4032×3024 photo | PNG (source) | — | ~10.5 MB |
| 4032×3024 photo | JPG | 95 | ~2.4 MB |
| 4032×3024 photo | JPG | 90 | ~1.7 MB |
| 4032×3024 photo | JPG | 75 | ~690 KB |
| 1920×1080 screenshot | PNG (source) | — | ~890 KB |
| 1920×1080 screenshot | JPG | 90 | ~340 KB — visible ringing on text |
When to convert, and when to stay on PNG
Convert to JPG when your PNG is photographic content: a camera photo saved as PNG, a screenshot of a photo viewer or lightbox, an image you downloaded as PNG from a social platform, or any image that originated from a real-world scene. These images have complex texture that JPG compresses far more efficiently than PNG. Converting them will typically cut file size by 80–90% with no visible quality loss at quality 90. Stay on PNG when your image has hard edges, flat colors, or transparency. Screenshots of text and code look worse as JPG because the DCT ringing artifacts appear as colored halos around the sharp contrast edges of character strokes. Diagrams, charts, logos, and icons that rely on sharp geometric lines suffer the same problem. Any PNG that uses transparency — a UI component, a sticker, a product photo with a clipped background — will lose that transparency when converted to JPG; white fill will replace all transparent areas. A practical rule: if you captured it with a camera, convert to JPG. If you created it in a design tool or captured it as a UI screenshot, keep it as PNG. When in doubt, do a quick test conversion at quality 90 and zoom in on the text and edge regions — JPG artifacts are immediately obvious when they are present.
Under the hood: which codecs are used
PNG decoding is handled by the browser's native image decoder, which every browser ships as part of its standard rendering pipeline. This is the fastest and most compatible path: it handles all PNG sub-formats (including 16-bit depth, interlaced, indexed-color, and grayscale) and requires no additional WASM download. The decoded pixel data is handed off as an ImageBitmap. JPG encoding uses mozJPEG, Mozilla's fork of libjpeg-turbo that has been optimized for output quality rather than encode speed. mozJPEG adds trellis quantization (a brute-force optimization pass that finds better DCT coefficient quantization decisions), improved default quantization tables tuned for perceptual quality, and progressive scan ordering. The net result is files that are 5–10% smaller than standard libjpeg at the same SSIM score. mozJPEG is compiled to WebAssembly and runs in a Web Worker so the main UI thread stays responsive during encode. Source: github.com/mozilla/mozjpeg.
FAQ
Do my files get uploaded anywhere?
No. The entire conversion runs in your browser using WebAssembly. Open your browser's Network tab during a conversion — you will see zero outbound requests beyond the initial page load. We do not operate an image-processing server, so there is nowhere to upload to.
What is the maximum file size?
Browser memory is the only limit. Very large PNGs (50MB+) work on desktop Chrome with 16GB of RAM. On older phones, stability is generally reliable up to around 20–30MP images. If a file is too large for available memory, you will see a clear error message rather than a silent crash.
Does PNG to JPG lose quality?
At quality 90, the difference between PNG and JPG for photographic content is below the threshold of human perception in standard viewing conditions. At quality 75, you may see faint banding in smooth gradients like sky or skin tone. At quality 50 and below, blocky DCT artifacts become visible. Use quality 90 as the default; drop to 75 only if you need to hit a specific file size target.
Does PNG to JPG lose transparency?
Yes, always. JPG has no alpha channel. When you convert a PNG that has transparent pixels, those pixels are composited onto a solid background — white by default. If your PNG uses transparency (a logo, a sticker, a product photo with a cut-out), you should use PNG → WebP instead, which preserves the alpha channel with significant compression.
Does the tool preserve EXIF metadata (GPS, camera model, etc)?
Yes by default. The PNG decoder passes through any embedded EXIF or XMP metadata, and mozJPEG writes it into the output JPG. If you are sharing the JPG publicly and want to strip location data, the advanced options on /convert include an EXIF-strip toggle.
Does this work offline?
Once the page loads once, the service worker caches the app shell and WebAssembly modules. Subsequent visits work with the network disconnected. That's why the app is installable as a PWA on desktop and mobile.
Why is my PNG photo so much larger than the equivalent JPG?
PNG uses DEFLATE lossless compression, which can only reduce file size by finding repeated byte sequences. Real-world photographs are full of camera sensor noise, fine texture, and subtle color variation — there is very little byte-level repetition to exploit. JPG's DCT encoding models how human vision perceives images at a frequency level, discarding information the eye cannot detect. A 4032×3024 photo that is 10MB as PNG is typically 1.5–2.4MB as JPG at quality 90, with no visible difference.
I converted a screenshot and the text looks blurry. Why?
JPG's DCT compression introduces ringing artifacts around high-contrast edges — exactly what text characters are. Screenshots of text, code, or UI elements are the worst case for JPG. If you need to share a UI screenshot, keep it as PNG or convert to WebP, which handles sharp edges much better than JPG. The comparison table above illustrates this: a 1920×1080 UI screenshot at JPG q90 shows visible ringing on text.
Can I convert multiple PNGs at once?
The current flow processes one file at a time. Batch conversion is on the roadmap. For multiple files today, the fastest workaround is to open /convert in several browser tabs and process them in parallel — each tab runs its own independent WASM instance.
Why is JPG better for photos but worse for screenshots?
JPG was designed for continuous-tone photographic images: smooth gradients, complex texture, subtle color transitions. Its DCT algorithm exploits the frequency structure of scenes captured by a lens. Screenshots are the opposite: flat fields of uniform color, hard geometric edges, and crisp sub-pixel-rendered text. JPG's block-based encoding introduces visible artifacts on those sharp transitions. PNG's lossless compression, which is inefficient for photos, is actually well-suited to the large areas of identical pixels that appear in UI screenshots.