Bulk Image Converter (HEIC and TIFF too)
Batch convert, resize and compress PNG, JPG, WebP, AVIF, GIF, iPhone HEIC and multi-page TIFF — MozJPEG/AVIF encoders, a target KB size, rotation, ZIP.
🔒 Processed in your browser — never uploaded. Multiple images download as a .zip.
HEIC photos and every page of a TIFF are opened in your browser first (the readers download once, the first time), each TIFF page turned the way its own orientation tag says.
Drop images here or click to choose
Several at once is fine. A copied picture, or SVG code, can be pasted here too.
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, kept in this browser until you press Forget saved settings) 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 does not flatten 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 drawn straight from the vector at the size you set here, so an enlarged icon stays sharp, and left at its own size it is the size its markup states (its width and height, or its viewBox, and 512 px when it states neither) — as a PNG, JPG, WebP or AVIF. SVG code copied as text can be pasted onto the page instead of a file, and a PNG can keep its transparency or be filled with a solid background colour.
iPhone HEIC photos and multi-page TIFF scans
Chrome and Firefox cannot read either format and Safari's support varies by version, so they are opened here first, in your browser: a .heic or .heif photo with libheif, and every page of a .tif or .tiff file, each page turned upright by its own orientation tag. The readers download once, the first time one of these files arrives, and never for anything else. A TIFF of several pages is listed page by page — scan-p1, scan-p2 — so a page you do not want is left out with the ✕ on its row, and every setting on this page applies to the pages as to any other picture. A TIFF may be up to 60 MB; everything else, 40 MB. Saved as JPG, a page can keep the scan’s own date, scanner, author, copyright and resolution as EXIF when you tick the box; a HEIC photo is re-encoded from its pixels, so its camera, date and GPS tags are not carried over. Rotate turns any still a quarter, a half or three quarters before it is sized, and each row has its own Preview and Save.
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 — this tool's own ceiling, kept under the 32,767 px a browser canvas allows on a side. How much area a canvas holds depends on the device, and a phone holds far less, so the size is also checked in the browser you are using: a picture it cannot draw at that size is named on screen and not saved, rather than saved blank.
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.
How do I turn an SVG into a PNG at twice or three times its size?
Drop the .svg file, or copy its code and paste it onto the page, and pick PNG. Under Resize choose Percentage and press 200% or 300% for a copy two or three times the size the SVG states, or choose Exact size and type a width — the height follows the shape. The vector itself is drawn at that size, so an enlarged icon stays sharp instead of being a small picture stretched.
Can a PNG get a solid background instead of a transparent one?
Yes. With PNG as the output, set PNG background to Solid colour and pick a colour: every transparent or partly transparent pixel is filled with it, which puts a logo or an icon on white or on any colour you like. Leave it on Transparent to keep the alpha channel. JPG has no alpha channel, so it is always flattened onto white.
Can it convert iPhone HEIC photos?
Yes. Drop .heic or .heif photos and each is opened with libheif in your browser, then saved as JPG, PNG, WebP, AVIF or GIF with any of the settings here. The reader downloads once, the first time a HEIC arrives. Nothing is uploaded. The photo is re-encoded from its pixels, so its camera, date and GPS tags are not carried over.
Does it handle multi-page TIFFs?
Yes. Every page of a TIFF is opened and listed as its own row, scan-p1, scan-p2 and so on, each turned upright by its own orientation tag. Leave a page out with the ✕ on its row; the rest convert like any other picture and download together as a ZIP. A TIFF may be up to 60 MB.
Can a JPG keep a TIFF scan’s date, scanner and copyright?
Yes. When a page came from a TIFF and you are saving JPG, tick “Keep a TIFF scan’s details in the JPG” and the scan’s dates, scanner, author, copyright and resolution are written as EXIF. The resolution follows any turn and resize, so the page prints at the size it was scanned. It is off by default.