Image compressor
Select an image file from your device to compress it locally using your browser's HTML5 Canvas engine. Adjust quality percentages, choose between JPEG, WebP, or PNG formats, scale dimensions, and inspect before-and-after file sizes in real time. Your photos and images never leave your machine.
Client-Side OnlyImage files never leave your device · Compression runs in browser RAM
Selected: sample.jpg
Supports JPEG, PNG, WebP, GIF, BMP · Never uploaded to a server
Choose target file type
Lower = smaller file, higher = clearer
Scale down dimensions to save more space
Example
2.4 MB camera photo to 380 KB WebP
A 2.4 MB JPEG photo compressed to WebP at 75% quality yields a 380 KB file (-84% size reduction) with crisp visual fidelity, ready for instant download.
Related: HEIC converter, GIF compressor, PDF to JPG converter, Video compressor
FAQ
- Are my uploaded photos or images sent to a server?
- No. All image decoding, canvas resizing, and re-compression occur 100% client-side in your browser RAM using the HTML5 Canvas API. No bytes ever leave your device.
- Which image formats are supported?
- You can load JPEG, PNG, WebP, GIF, and BMP files. Output compression is supported for JPEG, WebP, and PNG formats.
- Why does WebP provide smaller file sizes than JPEG?
- WebP uses modern predictive block encoding algorithms developed by Google, allowing it to achieve roughly 25% to 35% smaller file sizes than JPEG at comparable visual perceptual quality.
- Can I resize image dimensions as well as compression quality?
- Yes. Use the dimension scale slider or maximum width/height constraints to downscale image pixel dimensions, which drastically reduces file size for web publishing and email attachments.
- How do I compress an image in the browser without this page?
- Create an Image object: img = new Image(); img.src = URL.createObjectURL(file). On load, create canvas: c = document.createElement('canvas'); c.width = targetW; c.height = targetH. Draw image: ctx = c.getContext('2d'); ctx.drawImage(img, 0, 0, targetW, targetH). Call c.toBlob(callback, 'image/webp', quality) where quality is 0.01..1.00. Create a download link using URL.createObjectURL(blob). Revoke URLs when finished.