Is my image uploaded to your servers?
No. Decoding runs entirely in your browser using the native atob() function and a standard <img> element. The Base64 string is converted into a data: URI and assigned directly to the image source — no fetch, no XHR, no upload of any kind. Images containing screenshots of internal dashboards, customer photos, generated charts with private data, or proprietary diagrams stay on your device. Open DevTools → Network and click Decode to verify zero requests are made.
What image formats are supported?
PNG, JPEG (JPG), GIF (animated and static), WebP, SVG, and BMP are all supported because they are what every modern browser decodes natively. The auto-MIME detector recognises these from the Base64 magic-byte signatures: PNG starts with iVBORw, JPEG with /9j/, GIF with R0lG, WebP with UklGR, SVG with PHN2Zy or PD94bWw (XML declaration), BMP with Qk0. HEIC has limited browser support (Safari only) and may decode but not render in Chrome or Firefox; AVIF works in Chrome 85+, Firefox 93+, and Safari 16+.
What is a data URI?
A data URI (data: URL) is a URI scheme that embeds the actual file contents directly inside the URL — useful for inlining small images into HTML, CSS, or JSON without an extra HTTP request. The format is data:[<mediatype>][;base64],<data>. For images this is typically data:image/png;base64,iVBORw0KGgo... — the data: prefix, the MIME type, the optional ;base64 marker, a comma, and the encoded data. This decoder accepts both the full data URI form and the raw Base64 part alone.
Can I view EXIF metadata?
Not in this tool. The decoder shows the rendered image plus its dimensions (from the <img> element's naturalWidth and naturalHeight properties), MIME type (from auto-detection or the data URI prefix), and file size in bytes. EXIF data — camera make/model, exposure settings, GPS coordinates, capture timestamp — is embedded in JPEG and HEIC headers but requires a dedicated parser like exif-js or ExifReader. For privacy reasons, EXIF stripping is often the goal when re-encoding images, not viewing it.
Why does my Base64 not decode to a valid image?
Most common causes: (1) the Base64 string is truncated — copy-paste from a terminal or a JSON value can drop trailing characters or padding; (2) the string contains line breaks or whitespace that survived the copy — the decoder strips these but corrupted Base64 is unrecoverable; (3) the original was URL-safe Base64url with - and _ characters and your source mixed alphabets; (4) the file was not actually an image — for example a JSON service-account key encoded as Base64 will decode but never render. The error message distinguishes "not valid Base64" (decoding failed) from "not a recognizable image" (decoding worked, rendering did not).
How do I get a Base64 image from a file or URL?
Several ways: (1) command line — base64 image.png on macOS/Linux, certutil -encode image.png out.b64 on Windows; (2) browser DevTools — open an image, copy the data URI from the address bar; (3) Node.js — fs.readFileSync(path).toString("base64"); (4) JavaScript in a browser — read the file via FileReader.readAsDataURL() to get a ready-made data URI. To go the other direction (image to Base64), use the companion JSON to Base64 or the dedicated image-to-Base64 tool.
Why is the file size different from the original image?
The size shown is the decoded byte count — what the original image file weighs on disk. Base64 encoding adds 33% overhead (4 ASCII characters per 3 bytes), so the Base64 string itself is bigger than the file. The decoder calculates: bytes = (base64Length * 3 / 4) - padding. A 1 KB PNG becomes a ~1.33 KB Base64 string, but the decoded file is 1 KB.
What is the maximum size this tool can handle?
Browser memory and the data: URI size limit are the constraints. Most browsers comfortably handle data URIs up to a few megabytes. Chrome and Firefox accept data: URIs up to ~512 MB in theory, though performance degrades sharply past 5–10 MB. For large images (high-resolution photos, multi-megapixel screenshots), decoding works but rendering may be slow — a 50 MB Base64 string represents a ~37 MB image which will render eventually but take noticeable time. There is no server-imposed limit because no upload happens.