base64 | decode | jpg

> base64 | decode | JPG <

// 将 Base64 字符串与数据 URI 解码回 JPG / JPEG 照片 — 保留 EXIF、即时预览、一键下载

0 字符
🖼️

解码后的 JPEG 将显示在此

[FAITHFUL]

不重压缩

解码器输出的 JPEG 字节与编码前完全一致 — 同样的画质、同样的 EXIF、同样的 DCT 系数。

[PRIVATE]

本地解码

您的 Base64 字符串完全在浏览器内使用 atob() 解码。无上传,无服务器,不会对载荷进行分析。

[INSTANT]

实时预览

即刻看到解码后的照片及其尺寸 — 一键下载为 .jpg。

// 关于 BASE64 转 JPG

本工具接受的输入

  • >数据 URI:data:image/jpeg;base64,/9j/4AAQSkZ…
  • >原始 JPEG Base64 载荷(以 /9j/ 开头)
  • >含空白字符 / 换行的 Base64
  • >标准 RFC 4648 字母表(+/,可选的 = 填充)
  • >URL 安全 Base64(-_)— 解码时自动归一化
  • >多段 JPEG(JFIF、EXIF、Adobe、SPIFF 标记)

常见使用场景

  • >从 JSON API 响应中恢复照片
  • >从数据库 TEXT 字段中提取头像
  • >解码以数据 URI 形式存储的 CMS 图片字段
  • >从邮件 MIME 部分重建照片
  • >渲染通过 WebSocket 发来的相机快照
  • >调试损坏的 <img src="data:image/jpeg;base64,…"> 标签
  • >将照片缓存为 Base64 的离线优先应用

Base64 → JPG 解码原理

解码器会剥离任何数据 URI 前缀,对空白字符与 URL 安全字符进行归一化,然后调用 atob() 将每 4 个字符一组的 Base64 转换回 3 个二进制字节。结果会被封装进 MIME 类型为 image/jpeg 的 Blob 并通过 <img> 标签预览。由于 Base64 是双射的二进制到文本变换,输出的 JPEG 与原文件逐位一致 — 其 SHA-256 哈希吻合,没有任何画质损失。

JPEG 数据 URI 示例:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/wAALCAABAAEBAREA/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oACAEBAAA/AKp//9k=

性能与兼容性

  • >解码在载荷长度上是 O(n) — 可处理 100 MB+ 无压力
  • >使用原生 atob() + Uint8Array — 无第三方库
  • >支持所有主流相机厂商的 EXIF 丰富 JPEG
  • >可用于 Chrome、Firefox、Safari、Edge 以及移动端浏览器
  • >移动设备上支持双指缩放预览
  • >通过 Blob URL 下载 — 无需服务器往返

// 如何将 BASE64 解码为 JPG

📋

步骤 1:粘贴

将 Base64 字符串或完整数据 URI 粘贴到输入框

🔍

步骤 2:解码

点击 [DECODE] — JPEG 即刻渲染

📊

步骤 3:检查

在保存前检查照片、尺寸与文件大小

💾

步骤 4:下载

点击 [DOWNLOAD .jpg] 将逐位一致的 JPEG 保存到磁盘

// 代码示例 — BASE64 转 JPG

JavaScript(浏览器)

// Decode Base64 → JPEG Blob → preview
const b64 = '/9j/4AAQSkZJRgAB...';
const bin = atob(b64);
const arr = new Uint8Array(bin.length);
for (let i = 0; i < bin.length; i++) arr[i] = bin.charCodeAt(i);
const blob = new Blob([arr], { type: 'image/jpeg' });
document.getElementById('preview').src = URL.createObjectURL(blob);

将原始 Base64 JPEG 载荷解码、封装为 Blob,并通过 <img> 渲染。数据 URI 可直接赋给 src。

Node.js

const fs = require('fs');
const b64 = '/9j/4AAQSkZJRgAB...';
fs.writeFileSync('out.jpg', Buffer.from(b64, 'base64'));

使用 Node 内置的 Buffer 将 Base64 文本解码为 JPEG 文件。

Python

import base64
with open('out.jpg', 'wb') as f:
    f.write(base64.b64decode('/9j/4AAQSkZJRgAB...'))

仅使用标准库 — Base64 → JPEG 字节 → 文件。

PHP

<?php
file_put_contents('out.jpg', base64_decode('/9j/4AAQSkZJRgAB...'));

使用 base64_decode() 与 file_put_contents() 的一行代码。

Shell(macOS / Linux)

echo '/9j/4AAQSkZJRgAB...' | base64 -d > out.jpg

POSIX base64 -d 从 stdin 读取字符串并将 JPEG 写入磁盘。

// 常见问题 — BASE64 转 JPG

Q: 什么是 Base64 转 JPG 解码?

A: 它将 Base64 编码的 JPEG 还原为原始二进制形式。解码器一次读取 Base64 字符串中的 4 个 ASCII 字符,在 RFC 4648 字母表中查表,每组输出 3 个二进制字节。最终得到的字节数组是一个完整、有效的 JPEG 文件 — 与编码前具有相同的 DCT 系数、霍夫曼表、EXIF 元数据和画质。

Q: 如何判断 Base64 字符串确实是 JPEG?

A: 每个 JPEG 都以两个魔数字节 FF D8(图像开始)开头。当这些字节被 Base64 编码后,前 4 个字符总是 /9j/。因此任何以 /9j/4AAQ(JFIF 头)或 /9j/2wC(许多使用 Adobe APP14 的智能手机相机)开头的 Base64 字符串都是 JPEG。其他格式的前缀不同:PNG 为 iVBORw0KGgo,GIF 为 R0lGOD,WebP 为 UklGR

Q: 能否直接解码数据 URI?

A: 可以。如果您的字符串以 data:image/jpeg;base64, 开头,解码器会自动剥离该前缀并处理载荷。如果您只有原始 Base64 部分,我们的工具会检测 JPEG 魔数(/9j/)并将解码字节作为 image/jpeg 封装用于预览。解码前会删除所有空白字符、换行符与制表符,因此可以直接粘贴格式化过的 JSON 值。

Q: 解码会降低我的 JPEG 画质吗?

A: 不会。Base64 解码是纯二进制变换 — 每个 Base64 字符确定性地映射为 6 位,4 个字符解码为 3 个字节。输出的 JPEG 字节与编码前逐位一致,因此画质与原 JPEG 保存时完全相同。解码文件的 SHA-256 哈希与原文件一致。如果解码后的照片看起来比预期差,那是首次保存 JPEG 时就已经发生的画质损失,而不是 Base64 往返造成的。

Q: 解码后的 JPG 损坏了 — 可能是哪里出问题?

A: 典型原因:
字符串被截断 — Base64 在某处被切断。完整的 JPEG 以 FF D9(图像结束)结尾,对应的 Base64 是 /9k=2Q==。如果字符串结尾不是这些模式(加上可选的填充),就是不完整的。
双重编码 — JPEG 被 Base64 编码了两次。请再解码一次。
URL 安全字母表 — 如果字符串使用 -_ 而非 +/,有些解码器会拒绝。本工具两者都能归一化。
实际上是其他格式 — 载荷其实是 PNG 或 WebP。请使用我们的 通用 Base64 → 图片解码器,它会自动识别格式。

Q: 解码后 EXIF 元数据会被保留吗?

A: 会。EXIF APP1 段(相机型号、GPS、日期时间、镜头、ISO、白平衡、方向等)是 JPEG 字节流的一部分。由于 Base64 是逐位可逆的,每个字节 — 包括 EXIF — 都会被还原。如果出于隐私考虑需要去除 EXIF,请在解码使用 exiftool -all= out.jpg 这类工具或在浏览器中通过 canvas 重新导出来剥离元数据。

Q: 可以在终端中将 Base64 解码为 JPG 吗?

A: 可以。在 macOS 与 Linux 上:
echo '/9j/4AAQSkZJRgAB…' | base64 -d > out.jpg
(旧版 macOS 的 base64 使用 -D。)
在 Windows PowerShell 上:
[IO.File]::WriteAllBytes('out.jpg', [Convert]::FromBase64String('/9j/4AAQSkZJRgAB…'))
如果输入是完整的数据 URI,请先通过 sed 's|^data:.*base64,||' 剥离前缀。

Q: 可以解码多大的 Base64 JPG?

A: 以您浏览器的内存上限为准。一张 100 MB 的解码 JPEG 对应约 135 MB 的 Base64 文本,现代桌面浏览器能轻松处理。移动浏览器在约 40 MB 以内稳定。对极大的照片(中画幅相机的 RAW 转 JPEG 导出),建议使用服务端解码:base64 -d photo.b64 > photo.jpg 比浏览器往返快得多。

Q: 解码器能离线工作吗?

A: 可以,在首次加载页面之后。所有解码都使用浏览器内置 API(atob()Uint8ArrayBlobURL.createObjectURL()),均不需要网络连接。您可以禁用网络后继续解码验证这一点 — 预览与下载都会正常工作。

Q: Base64 JPEG 是加密的或私密的吗?

A: 不是。 Base64 是一种编码,而非加密。任何拿到您 Base64 字符串的人都能在毫秒内将其解码回原始照片,EXIF 数据(包括 GPS 坐标)也会一同被还原。如果 JPEG 包含敏感信息,请加密(AES-GCM、age、PGP)再进行 Base64,并始终通过 HTTPS 传输该字符串。

Q: 解码是否在客户端完成 — 有任何内容上传吗?

A: 不会上传任何内容。每一步 — 剥离前缀、归一化空白、调用 atob()、构建 Blob、渲染 <img>、触发下载 — 都在您的浏览器中进行。解码时打开浏览器开发者工具的网络面板,您会看到针对 Base64 载荷的零出站请求。本工具可安全用于机密截图、个人照片和受监管的数据。

Q: 如何在生产代码中将 Base64 解码为 JPG?

A: 在 Node.jsfs.writeFileSync('out.jpg', Buffer.from(b64, 'base64'))。在 Pythonopen('out.jpg','wb').write(base64.b64decode(b64))。在 Gob, _ := base64.StdEncoding.DecodeString(b64); os.WriteFile("out.jpg", b, 0644)。在 JavaFiles.write(Path.of("out.jpg"), Base64.getDecoder().decode(b64))。在 Ruststd::fs::write("out.jpg", base64::decode(b64)?)?。在 RubyFile.binwrite('out.jpg', Base64.decode64(b64))。在 PHPfile_put_contents('out.jpg', base64_decode($b64))

Q: Base64 转 JPG 与 Base64 转 PNG — 应该选哪个?

A: 查看 Base64 字符串的前缀。若以 /9j/ 开头,则是 JPEG — 使用 Base64 → JPG。若以 iVBORw0KGgo 开头,则是 PNG — 使用 Base64 → PNG。不能强制让 JPEG 解码器输出 PNG(反之亦然);魔数字节说明一切。拿不准时,请使用 通用解码器,它会自动检测格式并以正确的扩展名保存。

// OTHER LANGUAGES