Image Converter

Drop one image and convert it to PNG, JPG, WebP, GIF, AVIF or ICO. The input format is detected for you and the file is never uploaded anywhere.

🌐 Español

Drop your image file here
.png, .jpg, .jpeg, .webp, .gif, .bmp, .avif, .svg, .heic, .heif, .tiff, .ico

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Twelve extensions in, six formats out

The upload box lists exactly what it takes: .png, .jpg, .jpeg, .webp, .gif, .bmp, .avif, .svg, .heic, .heif, .tiff and .ico. The output dropdown is shorter on purpose, offering PNG, JPG, WebP, GIF, AVIF and ICO. Both lists come from one registry table in the code, which is why a target that cannot actually be produced never appears as an option you could pick and then watch fail.

Notice one gap while you are reading that list. .tiff is accepted, .tif is not, even though they name the same format. Drag a .tif file in and the page refuses it before any work begins, in a sentence that quotes your extension back and prints the full accepted list, so at least you are not left guessing. Rename the file or use the dedicated TIFF page instead.

From drop to download

  1. Drop your image onto the box, or press Choose a file. This page handles a single file per run.
  2. Read the Detected input format line. Nothing asks you to declare what you uploaded; the extension is read for you and shown in capitals.
  3. Set your target in Convert to. It arrives pre-selected as the first format that is not what you just dropped, which stops an accidental format-to-itself run.
  4. Press Image Converter. A percentage counter runs while it works, and Cancel is available beside it.
  5. Press the download link, which carries your original base name with the new extension, or Convert another to reset the box.

One honesty note about that Cancel button. It terminates the shared FFmpeg core, which is what a GIF conversion runs on, so a long GIF job really does stop. A canvas or WebAssembly encode cannot be interrupted part way through a single call, so pressing Cancel during a PNG or AVIF run clears the page and discards the result rather than halting the maths.

The four inputs that lean on your browser rather than on this page

Every image target except GIF goes through the browser’s own image decoder. That is exactly why PNG, JPG, WebP, GIF, BMP and AVIF are dependable here, since every current browser reads all six. It is also why I am not going to promise you HEIC, HEIF, TIFF or SVG.

Those four are on the accepted list, and if your browser happens to decode them then the conversion runs normally. But this page carries no decoder of its own for them, so on a browser that does not read HEIC natively, an iPhone photo will not convert here. The single-purpose pages are built differently and do carry one. HEIC to JPG runs a real HEIF decoder compiled to WebAssembly and takes a whole batch at once. TIFF to JPG runs a pure JavaScript TIFF decoder and accepts both .tif and .tiff. SVG to PNG rasterises through an image element rather than the bitmap decoder, which is the reliable path for vector files and lets you choose the output width. If a file of one of those four types fails on this page, those are where to take it, not a bug report.

The settings the encoders are actually called with

There is no quality slider here, which is the trade you make for a hub that never asks a question it does not need to. The numbers are fixed, and worth knowing:

If what you actually want is a smaller file in the same format rather than a different format, this is the wrong page and compress image is the right one, with a real quality control and an optional downscale. To change dimensions, resize image does that job on its own.

Transparency, animation, and the white that JPG leaves behind

PNG, WebP, AVIF and ICO all carry a real alpha channel, so transparency survives a conversion between any two of those four. JPG has no alpha at all, and the code handles that explicitly by filling a white rectangle before drawing your image on top. That is a decision, not a default, and it is the right one: drawing onto an empty canvas would composite every transparent pixel against black and give you a photo with a dark halo.

Animation is the narrower case. GIF is the only animated target, and it is the only one that can keep more than a single frame. Convert an animated GIF to PNG, JPG, WebP or AVIF and you get frame one, because the browser decoder hands back a single bitmap. Animated WebP deserves its own warning. The FFmpeg build this site pins cannot read the animation chunks inside a WebP file, so the dedicated WebP to GIF page detects animated WebP files and refuses them outright rather than writing an empty result. This hub does not run that check, so an animated WebP sent here reaches FFmpeg anyway and comes back as an empty GIF, while the dedicated page stops the run instead. Neither page can turn one into a moving GIF on the pinned build.

When a single-purpose page beats the hub

This page exists for the moment when you have a file and want it to be some other kind of file, without thinking about it. The narrower pages beat it in three situations. They usually accept several files at once, where this one takes exactly one. They often expose the setting you actually care about, such as the JPG quality on AVIF to JPG or the icon size set on PNG to ICO. And a few of them, as described above, carry decoders this page simply does not have.

For the common one-way trips there is a page each: WebP to PNG, PNG to WebP and JPG to WebP among them. For a complete favicon set rather than a single icon file, the favicon generator produces the whole bundle. And if you want to understand what an iPhone conversion is actually costing you before you run a few hundred of them, the guide on what changes when you convert HEIC to JPG covers it. The full set lives on the image tools page.

See it in action

Screenshot of the Image Converter tool with the converter hub at rest, printing the full list of image formats it accepts above an empty dropzone
Image Converter mid-process: the converter hub at rest, printing the full list of image formats it accepts above an empty dropzone.
Screenshot of the Image Converter result screen showing the dropped image converted and offered back as a download, with the detected input format and the chosen target still shown above it
The finished result: the dropped image converted and offered back as a download, with the detected input format and the chosen target still shown above it. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

How many files can I convert at once here?

One. The dropzone takes the first file it is given and ignores the rest, and there is no queue. That is a deliberate limit on this page rather than an oversight, and several of the single-format converters on the site do accept a whole batch, so reach for one of those when you have a folder to get through.

What does the tool do if my file will not convert?

It shows you the actual message the encoder produced, rather than a generic apology. Two kinds of failure look different. An extension that is not on the accepted list is refused before any work starts, in a sentence that names your extension and lists every one it does take. A file that starts converting and then fails surfaces the error that stopped it.

Which target is selected for me when I drop a file?

The first entry in the output list that is not the format you just uploaded, so drop a PNG and it pre-selects JPG, drop a JPG and it pre-selects PNG. The point is to avoid a pointless format-to-itself run when you press the button without looking. Change it in the dropdown whenever the guess is wrong.

Does converting a photo to JPG here give me a black background or a white one?

White. JPEG has no alpha channel, so the transparent areas have to become something, and this tool paints a solid white rectangle underneath before drawing your image onto it. Drawing straight onto a fresh canvas without that fill is the classic mistake that turns every transparent region black.

What is inside the ICO file this produces?

Three renders of your image at 16, 32 and 48 pixels square, each fitted inside its box without stretching and stored as PNG data within the icon container. Those are the sizes Windows and browser tabs actually ask for. A site that also wants Apple touch icons and a web manifest needs more than one file, which is a different job.

Why does the first AVIF or GIF conversion take longer than the ones after it?

Neither of those formats can be written by the canvas, so each pulls in its own WebAssembly encoder the first time you actually run a conversion to it, and that download happens once per tab. AVIF uses a dedicated AV1 image encoder and GIF is routed through the in-browser FFmpeg build with a two-pass palette graph. Once the code is loaded, later runs of the same target start immediately.

Related tools