IMAGE BASE64 TOOLOpen converter

Base64 to JPG: What Six Tools Actually Return

To get a JPG from Base64 without changing it, decode bytes that already contain a JPEG. A .jpg filename alone does not convert a PNG. Use the decoder below to check the detected format before saving; expand the reverse-direction section for JPG to Base64.

Decode Base64 to an image

Runs in your browser. Your input is not uploaded.

JPG to Base64 — reverse direction

JPG to Base64 encoding runs in your browser. Files are not uploaded.

Same inputs, six services

Tested on November 1, 2026, with Python 3.12.14 and Pillow 13.0.0 for saved-file verification. Each service received the same two fixed strings. All successful output comparisons below refer to this run, not every image or every browser.

Our first input was a 161-byte, 64 by 64 PNG encoded as 216 Base64 characters. Its central 24 by 24 square had RGBA values 240, 40, 20, 128; the corner was 0, 0, 0, 0. Alpha 128 out of 255 approximates half opacity. We used this small square to distinguish preserved transparency from an actual JPEG conversion.

Our second input was a generated 1600 by 1200 JPEG containing 1,155,920 bytes, represented by 1,541,228 Base64 characters. This is the final common-input round. An earlier 4,645,269-byte pilot caused repeated host memory problems and is excluded from the comparison. We did not combine the two JPEG sizes into a single result.

Service / obtained howPNG inputJPEG inputSign-in / limits
Base64.GuruBrowser download161 bytes; .jpg; real PNG1,155,920 bytes; .jpg; JPEGNo sign-in during this test. Quota not tested.
IPVoidBrowser download161 bytes; .png; PNG1,155,920 bytes; .jpg; JPEGNo sign-in during this test. Quota not tested.
Base64toimage.github.ioBrowser download161 bytes; .png; PNG1,155,920 bytes; .png; real JPEGNo sign-in during this test. Quota not tested.
ToolsLabBrowser download for JPEG onlyExplicit PNG rejection; no output1,155,920 bytes; .jpg; JPEGNo sign-in during this test. Quota not tested.
MagicPatternCopy / output-field recovery; download unverified161 bytes; recovered PNG1,155,920 bytes; recovered JPEGNo sign-in during this test. Quota not tested.
JamRendered-preview recovery; no download control observed161 bytes; recovered PNG1,155,920 bytes; JPEG under PNG MIME labelNo sign-in during this test. Quota not tested.

What the saved files actually contained

Base64.Guru downloaded our small input as image.jpg and displayed a JPEG MIME label, while also warning that the detected file was PNG. The saved file was still 161 bytes, decoded as PNG, and had exactly the original SHA-256. Its JPEG result contained 1,155,920 bytes and matched the second input byte for byte. Neither result required signing in during this run.

IPVoid downloaded the small result with a PNG extension and identified image/png. Both its 161-byte PNG and its 1,155,920-byte JPEG matched their respective originals exactly. In our PNG, the center alpha remained 128 and the corner alpha remained zero. No new opaque background, altered edge pixels, or added watermark appeared in that saved file.

Base64toimage.github.io downloaded both results with PNG extensions. The small file really was PNG, but the 1,155,920-byte large file had a JPEG signature and opened as a 1600 by 1200 JPEG. Both hashes matched the original inputs. The misleading extension changed neither the image format nor its pixel data in this pair of tests.

ToolsLab rejected our PNG with the message that the data appeared to be PNG rather than JPEG. We recorded that as a rejection, not a transparent JPEG result. Its JPEG input did produce a downloadable file: 1,155,920 bytes, 1600 by 1200 pixels, and the same SHA-256 as the input. Its displayed quality label said High; we did not treat that label as an independent quality measurement.

MagicPattern displayed both images, but its download action did not produce a file through our controlled browser. We recovered the small output through its Copy action and the large output from its actual output field, saving the complete supplied data URI rather than re-encoding the input. Those recovered files were 161 and 1,155,920 bytes and matched the original hashes. This verifies its generated outputs, not the download button.

Jam displayed our PNG and JPEG without a sign-in. We found no dedicated download control in the observed interface, so we saved the data URI from the rendered image. Both recovered files matched the originals exactly. Its large preview URI declared image/png even though the recovered bytes were JPEG. We therefore report preview recovery separately from a successful download workflow.

For every obtained small output, the size ratio was 161 / 161 = 1.000. For every obtained large output, it was 1,155,920 / 1,155,920 = 1.000. The numerator is the saved output byte length; the denominator is its matching input byte length. There was no smaller-file winner among these results.

Transparency, quality, and limits

The obtained PNG files tied on preserved transparency. They remained PNG files, so this is not a test of alpha flattening into JPEG. None of these PNG outputs proves that a service can create a clean opaque JPG from semitransparent edges. If you need an actual format change, choose a converter with an explicit background-color setting and inspect the resulting JPEG.

These were generated, non-private test images. Browser rendering of the saved outputs was checked, and byte comparisons were performed on the recovered files. We did not test account quotas, speed, other browser engines, or all metadata types. A failed automated download is a workflow limitation in this run, not proof that a website never supports downloads.

We cannot name a heaviest-ad winner from a uniform first-screen measurement: ad delivery and intervening overlays varied during testing. Code Beautify showed an interstitial during a download attempt, but its file was not obtained and it is not counted as a successful conversion. Online JPG Tools also failed to yield a verified output in our attempts; neither failure is a claim of unsupported conversion.

The comparison is limited to the ten accessible result pages read for this audit. The original Base64.sh and Stack Overflow results were blocked on retry, so FreeToolOnline and Aspose were read in their place. Generic claims that Base64 preserves bytes, or that filenames can be misleading, are not counted as exclusive findings; the paired measurements above are the evidence.

Download the small PNG input · Download the large JPEG input · Download the measured result ledger

Does changing a PNG extension create a JPG?

If your decoded image is already JPEG, saving its decoded bytes avoids an extra lossy encoding pass. If its bytes are PNG, changing the filename or the data URL MIME label is not the same operation as converting its pixels into JPEG.

Can I also convert JPG to Base64?

The encoder on this page reads your chosen JPG locally and returns its Base64 data URI. The decoder also runs locally. Neither tool sends the selected image or pasted text to a conversion server. Browser memory remains a practical limit.

Fictional location fields after a Base64 roundtrip

All extracted location fields in our original fictional JPEG matched the fields extracted from its decoded copy.

We generated the abstract artwork and deliberately inserted fictional coordinates and a fictional date. This is not a real photograph or a record of a real location. The values below were extracted during this run from each JPEG with a metadata parser, not inferred from its preview.

  • GPSLatitudeRef (measured extraction): original N; restored N.
  • GPSLatitude (measured extraction): original 12, 34, 56; restored 12, 34, 56.
  • GPSLongitudeRef (measured extraction): original E; restored E.
  • GPSLongitude (measured extraction): original 65, 43, 21; restored 65, 43, 21.
  • GPSAltitudeRef (measured extraction): original 0; restored 0.
  • GPSAltitude (measured extraction): original 12; restored 12.
  • GPSDateStamp (measured extraction): original 2000:01:01; restored 2000:01:01.

Coordinate interpretation (not an additional measurement): GPSLatitude components mean 12 degrees, 34 minutes, 56 seconds north; GPSLongitude components mean 65 degrees, 43 minutes, 21 seconds east. GPSAltitudeRef 0 identifies an above-sea-level reference; the recorded altitude field is 12 metres. These inserted values are fictional.

Download the fictional original · Download the decoded copy

To repeat: encode the original file bytes, decode the payload into a JPEG, then extract the GPS EXIF directory from each file and compare every listed field. The browser encoder above does not remove or inspect location metadata.

For other recovered image formats, use Base64 to image. To distinguish original-byte downloads from image re-encoding, read decode an image without changing its original file.