Bulk Image Converter — Resize, Compress & Convert

Batch resize, compress and convert images — PNG, JPG, WebP, AVIF and animated GIF, MozJPEG, palette PNG, target KB, zip download. Free, in-browser, no upload.

Drop images here or click to browse

🔒 Processed in your browser — never uploaded. Multiple images download as a .zip.

Resize, compress and convert images in one pass

Drop in as many images as you like and process them all at once: resize them (fit inside a box, a percentage, or an exact size), re-encode to PNG, JPG, WebP, AVIF or GIF, and either dial in the quality (20–95) or compress to a target file size — enter a KB limit and the tool binary-searches the highest quality that fits under it, per image. One image downloads on its own; several arrive as a single .zip. Nothing is uploaded: every picture is decoded, resized and encoded in your browser, up to 40 MB per file.

Real encoders, not just the canvas. The browser's own encoder writes every PNG as 8-bit RGBA whatever the picture holds, cannot write AVIF at all, and gives JPEG a single quality knob. So three more encoders sit behind the format dropdown: MozJPEG (a 250 KB encoder, with progressive rendering and a 4:4:4 / 4:2:0 chroma choice), AVIF via libavif (3.5 MB, with an effort slider from 0 to 10 and the same chroma choice), and a palette PNG writer of our own — median-cut quantization to 2–256 colours with optional Floyd–Steinberg dithering, written out as a real indexed PNG at 1, 2, 4 or 8 bits per pixel. Both WebAssembly encoders are fetched only when you pick that format, once. WebP uses the browser's encoder, lossy or lossless — and the tool reads the frame chunk back to check, saying so when the browser handed it a lossy file anyway.

Choose how the pixels are resampled. Instead of leaving the scaling to the canvas you can pick Lanczos3, Mitchell, Catmull-Rom, Triangle (bilinear) or Pixel art (nearest), and switch on averaging in linear RGB or premultiplied alpha — the first keeps a shrunk photo from coming out dark, the second keeps a dark halo off transparent edges. An exact size can be typed in pixels, inches, centimetres or millimetres at a DPI you set (1–2400), and the pixel result is printed under the fields. Don't enlarge if smaller leaves an image at its own size rather than blowing it up. Percentage has a 5–400% slider plus one-click 25, 33, 50, 200, 300 and 400% buttons.

See it before you download. A live preview re-renders 350 ms after your last change, through the same code path the download uses, and shows a before/after slider with the result's size, the signed percentage change and the output pixel size. For a batch it names the file it is showing and says the rest get the same settings. Compare formats encodes the first image as PNG, JPG, WebP and AVIF at your current settings — and as GIF too when the picture already is one — lists the sizes, marks the smallest and offers a button to adopt it. A batch keeps going past a file it cannot read and names the ones it skipped. JPG has no alpha channel, so transparency is flattened onto white before encoding.

Animations and vectors come in too. An animated GIF keeps moving: every frame is decoded here — the browser hands back only the first — resized with the same settings as a still, and written back out with its own delay, so shrinking an animation no longer flattens it. Choose GIF as the output, or leave Keep original on a GIF and it stays one; any other picture written as a GIF becomes a single frame, and every frame is cut to the 256 colours the format holds. An SVG is rasterised at the size its own markup states (its width and height, or its viewBox, and 512 px when it states neither), so a vector can be turned into a PNG, JPG, WebP or AVIF at whatever size you set here.

Frequently asked questions

Can I compress an image to a specific file size, like under 200 KB?

Yes. Pick a lossy format (JPG, WebP or AVIF), choose "Compress by: Target file size", and enter the KB limit. The tool binary-searches the integer qualities from 20 to 95 for the highest one whose encoded file stays under that size, per image, and measures every candidate before accepting it — so a result reported as under the target really is. If even quality 20 will not fit, it saves the smallest version it could make and names the files that missed. Lossless WebP has no quality to search, so the target does not apply to it.

Can I resize, compress and change format at the same time?

Yes. Set an optional resize, pick an output format and a quality (or target size), and every image is processed in one pass — no need to run three separate tools.

How are multiple images downloaded?

A single image downloads directly; multiple images are bundled into one .zip so you get them all in one click.

Are my images uploaded?

No. Decoding, resizing and encoding all happen on your device. Lossless PNG and WebP go through the browser's canvas encoder, JPG through the canvas or MozJPEG, AVIF through libavif, a palette PNG through the tool's own quantizer and PNG writer, and a GIF through the tool's own frame decoder and the gifenc encoder. Safari and the browsers on an iPhone or iPad have no WebP encoder, so there WebP is not offered and a WebP kept in its own format is saved as PNG. The two WebAssembly encoders are downloaded from this site the first time you pick that format — your pictures still never leave the browser.

Can it write AVIF?

Yes. AVIF is one of the five output formats, encoded with libavif compiled to WebAssembly, with an effort slider from 0 (fastest, biggest) to 10 (slowest, smallest) and a chroma choice of auto, 4:4:4 or 4:2:0. It is a 3.5 MB encoder that is downloaded the first time you choose AVIF and not before, because no browser canvas can write the format itself.

Why did my PNG come out bigger than the original?

Because the browser's canvas encoder writes every PNG as 8-bit RGBA, so a screenshot or a logo that was stored with a small palette gets re-saved with a much larger one. Switch "PNG mode" to "Reduce palette": the tool reduces the picture to between 2 and 256 colours by median cut, optionally with Floyd–Steinberg dithering, and writes a genuine indexed PNG at 1, 2, 4 or 8 bits per pixel with transparency kept in a tRNS chunk. That is the mode for screenshots, logos and flat art; leave it on "Lossless" for photographs.

Which resampling method should I pick?

"Automatic" hands the scaling to the canvas, which is fine for small changes. Lanczos3 is the sharpest for shrinking a photo; Mitchell is softer and shows fewer ringing artefacts; Catmull-Rom sits between them; Triangle is plain bilinear; Pixel art is nearest-neighbour, which is the one that keeps hard edges when you enlarge sprites. With any of the five you can also turn on "Average in linear RGB", which stops a heavily shrunk image from going darker than the light it stands for, and "Premultiply alpha channel", which stops transparent pixels bleeding a dark edge into their neighbours.

Can I set a size in inches or centimetres for printing?

Yes. In "Exact size" the width and height can be entered in pixels, inches, centimetres or millimetres, with a DPI field from 1 to 2400. Switching units restates the same physical size rather than reinterpreting the number, and the resulting pixel size is printed under the fields so nothing is hidden. A side over 20,000 px is refused outright — no browser canvas can hold it.

How do I find out which format gives the smallest file?

Press "Compare formats". It encodes the first image as PNG, JPG, WebP and AVIF at your current resize and quality settings — and as GIF as well when the picture already is one, which is the only case where that row is worth its encoding time — lists the real sizes, marks the smallest one, and gives you a button to switch the output to it. The table clears itself whenever a setting other than the output format changes, so it never shows sizes that no longer apply.

Is there a limit on file size or how many images I can add?

There is no limit on the number of images — they are processed four at a time and bundled into one zip. Individual files over 40 MB are refused, with the file's size and the limit both named, because a picture that large decodes to a canvas of several hundred megabytes and kills the tab with nothing on screen.

Does it keep animated GIFs animated?

Yes, when GIF is the output. The frames are decoded by the tool itself — the browser only ever hands back the first one — so every frame and its own delay survive, and a resize is applied frame by frame. "Keep original" on a GIF keeps it a GIF. An animated PNG stays animated when PNG is the output or Keep original is left on it: every frame, each frame's own delay and the loop count are kept, and Reduce palette does not apply to it. An animated GIF converted to PNG, JPG, WebP or AVIF, an animated PNG converted to anything but PNG, and an animated WebP whatever the output all give you one still frame. SVG files are decoded and rasterised; PSD and camera RAW are not.