Faruk ToolsVisit Portfolio

Image Compressor & Converter

Compress and convert images to JPEG, PNG, or WebP entirely client-side, with resizing, a quality slider, batch processing, and a one-click .zip download. Reads AVIF, GIF, and BMP too, with no upload ever leaving your browser.

Nothing leaves the browser. Every image is decoded, resized, and re-encoded on this device using the Canvas API — there is no upload, no server, and nothing is saved.

Drag and drop images here, or

Up to 30 files, 25.0 MB each. JPEG, PNG, WebP, GIF, BMP, AVIF (where your browser can decode it) all work as input.

Output format

Resize

This tool decodes, resizes, and re-encodes images entirely with the browser's own Canvas API — no file is ever uploaded anywhere. Drop in one image or thirty, pick JPEG, PNG, or WebP as the output, optionally cap the dimensions or scale by a percentage, and download the results individually or as a single .zip.

It can read a much wider range of formats than it can write: modern browsers can decode JPEG, PNG, WebP, GIF, BMP, and AVIF, so all of those work as input. Writing is a different story — no browser today has a real AVIF (or BMP, or animated GIF) encoder built into its canvas, so those aren't offered as outputs here. Asking canvas for an AVIF blob doesn't error, it just silently hands back a PNG, which is worse than not offering it at all — this tool would rather be upfront about the limit than produce a mislabeled file.

HEIC (the format iPhones save photos in by default) isn't supported as input either — no major browser besides Safari can decode it, and even there it's inconsistent, so this tool doesn't pretend otherwise.

How to use this tool

  1. 1Drag images in or click Choose files — JPEG, PNG, WebP, GIF, BMP, and AVIF (if your browser can decode it) all work.
  2. 2Pick an output format. JPEG and WebP get a quality slider; PNG is always lossless.
  3. 3Optionally resize: "Fit within" caps the width/height while preserving aspect ratio and never enlarges a smaller image; "Scale %" applies a flat percentage.
  4. 4Click Convert, then download files one at a time or grab everything at once as a .zip.

What can be read vs. written

FormatRead (input)Write (output)
JPEGYesYes, with a quality slider
PNGYesYes, always lossless
WebPYesYes, with a quality slider
AVIFYes, in most current browsersNo — no browser has a canvas AVIF encoder yet
GIF / BMPYes (GIF reads only the first frame)No — not supported by any canvas encoder
HEIC/HEIFNo — unreliable even in SafariNo

Frequently asked questions

Why can't I export to AVIF if my browser can open AVIF files?+

Decoding and encoding are different capabilities, and browsers only got around to the first one. Chrome, Firefox, and Safari can all display an AVIF image, but none of them expose an AVIF encoder through the Canvas API's toBlob() method — asking for one just silently returns a PNG instead, with no error. The only way to get real client-side AVIF output today is a WebAssembly encoder library, which is a meaningfully heavier dependency this tool intentionally leaves out in favor of staying simple and fast.

Why did my transparent PNG get a white background after converting to JPEG?+

JPEG has no transparency channel at all, so something has to fill in for it. Canvas defaults to black if you don't specify otherwise, which usually looks like a bug — this tool explicitly fills with white first, matching what most people expect when flattening a logo or icon for JPEG. If you need to keep transparency, convert to PNG or WebP instead.

Why did converting to WebP or JPEG actually make the file bigger?+

This can happen with very small, simple images (icons, screenshots with large flat color areas) where PNG's lossless compression is already near-optimal — JPEG and WebP's block-based encoding has more overhead and doesn't always win on tiny or graphic-heavy images. The size comparison shown after converting is there so you can catch this and keep the original format when it's not worth switching.

Is there a file size or file count limit?+

Yes — 25 MB per file and 30 files per batch. This is a practical limit to keep the browser tab responsive, since encoding happens on the main thread; it isn't a paywall or artificial restriction.

What happens to an animated GIF?+

Only its first frame is read — createImageBitmap() (the browser API this tool uses to decode images) doesn't expose GIF's other frames. Converting an animated GIF here will produce a single still image, not an animation, regardless of the output format you choose.