Change an image’s format, with a plain statement of what that format can and cannot store
The tool loads here. It needs JavaScript, because the work happens on your device.
Your files and your privacy
Your images are never uploaded. Each file is read into this browser tab, decoded and
re-encoded by the browser’s own image pipeline inside a Web Worker, and handed back as a
download. The page’s Content-Security-Policy restricts connect-src to this origin, so the
browser itself would block an upload even if the code attempted one.
What this tool does
Convert an image from one format to another using the encoders your browser already ships
with. PNG, JPEG and WebP can be written; JPEG, PNG, WebP and GIF can be read. Before
anything is written, the panel states whether the conversion is lossy and what will happen
to transparency.
Converting decodes your picture into plain RGBA pixels and asks a different encoder to
write them out again, which means a conversion carries only what the destination format
can represent. PNG is written by a lossless encoder and keeps an alpha channel. JPEG is
lossy at every setting and has no alpha at all, so transparent pixels are flattened onto a
background colour you pick before encoding. WebP keeps alpha but is written in lossy mode
by the browser, even at quality 100. The panel names each of those consequences for the
exact conversion you asked for.
How to use it
Choose the image, or several images, that you want to convert.
Pick the output format. The note under the picker describes what that encoder does with
detail and with transparency.
If you chose JPEG, set the background colour that transparent areas will be flattened
onto. It starts at white.
Select Convert and read the warning panel, which lists every consequence of this
particular conversion.
Download the converted file, or a ZIP when you converted more than one.
Example use cases
Turning a PNG screenshot into a JPEG so it fits inside a size-limited upload form.
Producing a WebP copy of a logo that keeps its transparent background but weighs less
than the PNG.
Saving the first frame of a GIF as a still PNG for use in a document.
Supported input and output
Accepts
JPEG, PNG and WebP, up to 40 MB per file
GIF, decoded as its first frame only
Produces
PNG: lossless encoder, keeps transparency, large for photographs
JPEG: always lossy, no alpha channel, small for photographs
WebP: lossy in the browser encoder, keeps transparency
A ZIP named converted-images.zip for a batch
What this tool will not do
GIF is input only. Animation is not preserved, and GIF is not offered as an output
format, because a still image with a .gif extension would misrepresent itself.
HEIC, HEIF, AVIF, TIFF and camera RAW are not accepted, because browsers cannot decode
them reliably without a platform codec.
Converting a JPEG to PNG recovers nothing. The PNG faithfully stores the pixels the JPEG
already degraded, usually in a considerably larger file.
WebP output needs a browser that can encode WebP. One that cannot reports an error
rather than quietly writing a different format.
Metadata is generally lost as a side effect of re-encoding, which is not the same thing
as a guarantee that it was removed.
Colour profiles are not carried through the canvas, so an image with an unusual embedded
profile can shift slightly in colour.
Common mistakes
Exporting a transparent PNG as JPEG and only noticing later that the transparency became
a solid block of the background colour, which defaults to white.
Expecting PNG output to shrink a photograph. Its encoder stores every pixel exactly, so
the result is routinely several times the size of the JPEG it came from.
Reading WebP at quality 100 as lossless. The browser encodes WebP in lossy mode at every
setting, so detail is discarded even at the top of the slider.
Converting an animated GIF and shipping the result as an animation: only the first frame
is decoded, so the output is a single still image.
Technical notes
Decoding uses createImageBitmap, which handles every input type the browser can read and
behaves identically inside a Web Worker. The bitmap is drawn once into an OffscreenCanvas
and encoded by the browser through convertToBlob, with canvas.toBlob as the fallback.
Because a canvas holds nothing but RGBA pixels, anything a source format carried beyond
pixels survives only if the destination encoder can represent it: for a format without an
alpha channel the canvas is filled with your chosen matte colour before the bitmap is
drawn, which is why transparency becomes a flat colour rather than black in one browser
and white in another.
Frequently asked questions
Which conversions are lossless?
Only writing to PNG, and only when you do not also change the pixel dimensions. Every
JPEG export is lossy, WebP is lossy in the browser encoder at any quality, and any
resize resamples the image regardless of format.
What happens to transparency when I convert to JPEG?
JPEG has no alpha channel, so every transparent pixel is filled with the background
colour you choose before encoding. If you need to keep transparency, convert to PNG or
WebP instead.
Can I convert HEIC photos from an iPhone?
No. HEIC and HEIF are not accepted, and neither are AVIF, TIFF or camera RAW, because a
browser cannot decode them without help from the operating system. Export a JPEG from
your phone first.