DEV Community

Cover image for I built a free image compressor that never uploads your files
Muhammad Saud
Muhammad Saud

Posted on

I built a free image compressor that never uploads your files

Every image compressor I tried did one of three things: upload my files to a server I do not control, stop me after 20 images unless I paid, or quietly watermark the output. For a task this simple, that felt wrong.

So I built the tool I wanted and put it on my site: Free Image Compressor & Converter

What it does

  • Batch processing: drop in as many JPG, PNG or WebP files as you like
  • Compress with a quality slider, with before and after sizes for every file
  • Convert between JPG, PNG and WebP
  • Resize by max width or by percentage
  • Download files one by one, or everything together as a ZIP
  • No sign-up, no file limit, no watermark

How it works

Everything runs in the browser with the Canvas API. Your images are decoded locally, re-encoded at the settings you chose, and packed into a ZIP with JSZip if you want them together. Nothing is sent to a server, which also means the tool costs me nothing to run and works the same for the first visitor and the ten-thousandth.

Two honest side effects of this approach:

  1. Re-encoding through a canvas strips EXIF data, including GPS coordinates. For photos you share online, that is usually a privacy win.
  2. Compression here means re-encoding at a lower quality setting. There is no server-side magic, and PNG stays lossless, which leads to the next point.

The PNG lesson

My first tester converted a 340 KB photo to PNG and got a 2 MB file back. The tool was not broken; PNG is lossless and simply the wrong choice for photographs. But a good tool should stop you from walking into that. The compressor now leaves PNG out of the compress flow entirely, and warns you in the convert flow when a PNG output will make your photos bigger. Small UX decisions like that matter more than another feature.

Try it

The tool is live at https://logicstack.org/tools/image-compressor

If you try it, I would genuinely like to know what felt missing or confusing. I build in public and feedback shapes the next iteration.

Top comments (0)