ALL IMAGE TOOLS56
Base64 to Image
Base64 to Image — Decode a String Back to a File
Paste Base64 or a data URI and download the image it encodes.
About Base64 to Image
A Base64 string is an image with its bytes rewritten as text so it can travel inside HTML, CSS, JSON or an email body. This tool turns one back into a file. Paste a bare payload, a whole data: URI, a line-wrapped block out of a terminal or a PEM-style dump, or the entire img tag you copied from a page's source — the payload is pulled out of any of them. URL-safe Base64, the kind JWTs and many APIs emit, is translated for you, and missing padding is added back before anything is decoded. What the tool will not do is trust the label. The mediatype in front of a data URI is something a person typed, and data:image/png;base64, in front of JPEG bytes is one of the commonest pastes there is — so the format is read from the decoded magic bytes, the download is named from those, and any disagreement between the two is stated on the page rather than quietly resolved. The refusals are specific for the same reason: a percent-encoded data URI, a paste that was cut short mid-copy, and bytes that decode perfectly but are not an image are three different problems with three different answers, and the page tells you which one you have. Everything happens in this tab — the string never leaves your device.
Questions
What can I paste in — does it have to be a bare Base64 string?
No. A bare payload, a whole data: URI (parameters and all), a block that a terminal wrapped at 76 columns, and the entire img tag you copied out of a page's source all work. The payload is pulled out of the wrapper, whitespace is stripped, URL-safe characters are translated and missing padding is added back before anything is decoded.
The data URI said image/png but the file saved as .jpg. Why?
Because the bytes were JPEG. The mediatype in front of a data URI is a label somebody typed, and it is wrong often enough that this tool reads the format out of the decoded magic bytes instead. When the label and the bytes disagree, the download is named from the bytes and the page tells you that it happened rather than renaming your file quietly.
It says my paste is not Base64, but I copied it straight out of my terminal.
Two different faults produce that, and the page names which one you hit. A length one character past a whole four-character group cannot come from any Base64 string, so it means the copy was cut short — grab the whole thing again. A data: URI with no ;base64 marker is percent-encoded rather than Base64, so there is nothing there to decode at all.
Does it handle URL-safe Base64 from a JWT or an API?
Yes. The URL-safe alphabet swaps + and / for - and _, which plain atob rejects outright; both are translated back and any missing = padding is restored. The OUTPUT panel says whether that translation was needed, so you can see what the tool had to do to your string.
Can it decode an SVG data URI?
Yes, if the payload is genuinely Base64. The SVG is shown by handing it to an img element, which is the only way this site ever renders SVG — the markup is never inlined into the page, so nothing inside it can run. A data: URI whose SVG is percent-encoded rather than Base64 is refused with that reason named.
Is my file uploaded to a server?
No. Transmute processes everything locally in your browser using JavaScript and WebAssembly. Your files never leave your device — there is no server, no upload, no cloud processing.