上传文件
  1. base64hub
  2. 图片工具
  3. JPG 转 Base64

JPG 转 Base64

拖入 JPG 或 JPEG,得到它的 Base64 或 data:image/jpeg URI。手机照片很大,所以你可以在编码前缩小尺寸,并移除包括 GPS 在内的 EXIF 数据。

免费 无需注册,不限次数 本地 不上传任何内容 EXIF 移除 GPS 和相机数据 更新于 2026年10月27日
将图片拖到这里、粘贴或选择图片
输入 –输出 –大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把 JPG 转为 Base64

  1. 拖入 .jpg 或 .jpeg 文件,用文件选择器选择,或用 Ctrl+V 粘贴已复制的图片。
  2. 对于直接来自相机或手机的照片,设置 最大宽度(例如 1200)并调整 质量。默认值为 85%。
  3. 如果照片要分享或发布,勾选 移除元数据(EXIF)。
  4. 选择 输出为:默认是 Data URI,大多数 API 需要的是纯 Base64。然后按 复制输出。

预览会显示像素尺寸,重新编码后还会显示新的文件大小,你可以多试几种设置,看着数字往下降。

JPG 的 Base64 里有什么

所有 JPEG 文件都以 SOI 标记 FF D8 FF 开头,所以它们的 Base64 都以 /9j/ 开头。后面的字符说明了紧随其后的是哪种头部:

文件开头Base64 开头常见来源
FF D8 FF E0 + JFIF/9j/4AAQSkZJRg图片编辑器、网页导出、大多数转换工具
FF D8 FF E1 + Exif/9j/4,之后的字符不固定相机和手机(EXIF 块在最前面)
FF D8 FF DB/9j/2w精简过的或极简的编码器

相机拍出的 JPEG 带有 EXIF 块,其中有设备型号、拍摄时间、方向,如果开启了定位,还有 GPS 坐标。Base64 不会隐藏其中任何信息。任何人用 Base64 转 JPG 解码这个字符串,都能拿到元数据完好的原始文件。

编码前缩小照片

一张现代手机照片有好几 MB。转成 Base64 还要再大三分之一,对于 JSON 请求、CSS 文件或 HTML 邮件来说太大了,用在其他地方也很慢。

两项设置就能解决大部分问题:

  • 最大宽度 设置以像素计的最大宽度。宽度减半,像素数就减为四分之一。
  • 质量 控制 JPEG 压缩。只要照片被重新编码就会生效,也就是设置了 最大宽度、转换为 格式或 移除元数据(EXIF) 时。在 75% 到 85% 之间,照片上很难看出差别,而文件比 95–100% 时小得多。

重新编码 JPEG 总会损失一点细节,因为它要先解码再压缩一次。请从原图出发只做一次,不要把结果再放进转换器处理第二遍。

JPEG 不支持透明。把透明背景的 PNG 或 WebP 转为 JPEG 时,透明部分会变成白色。需要 alpha 通道时,请保留 PNG 或 WebP。

JPG Base64 的使用场景

  • 通过 JSON API 上传照片,包括描述或分析图片的 AI 视觉模型。很多服务会在服务端缩小大图,所以发送更小的 JPEG 可以加快请求,又看不出损失。
  • HTML 中的内联缩略图和占位图,例如完整图片加载期间显示的 20 像素宽模糊预览。
  • 单文件文档,例如嵌入了几张照片的 HTML 报表。

对于网站上的大照片,普通图片文件仍然更好:它可以被缓存、懒加载,还能通过 srcset 提供多种尺寸。

用 Python 缩放并编码

Pillow 几行代码就能缩放并重新编码照片,Base64 则交给标准库完成。除非显式传入,Pillow 不会把 EXIF 复制到新文件,所以这段代码同时也移除了元数据:

import base64, io
from PIL import Image

with Image.open("photo.jpg") as im:
    im.thumbnail((1024, 1024))
    buf = io.BytesIO()
    im.save(buf, "JPEG", quality=80)

b64 = base64.b64encode(buf.getvalue()).decode("ascii")

读取文件和流式处理的更多内容见 Python 中的 Base64。

常见问题

  • 照片显示时被旋转了。 很多手机按传感器方向保存像素,再把旋转角度写进 EXIF 标记。现行浏览器会应用这个标记,工具重绘照片时也会保持看到的方向。忽略 EXIF 的软件可能会显示原始方向。
  • Base64 比预期长。 看看指示条中的输入大小。从聊天软件收到的“小”照片也可能有 3000 像素宽。
  • API 拒绝了图片。 确认它要的是带 data:image/jpeg;base64, 前缀的还是纯 Base64,并把类型设为 image/jpeg,而不是 image/jpg。

常见问题

data URI 中应该写 image/jpg 还是 image/jpeg?

image/jpeg。image/jpg 不是注册过的类型。浏览器会嗅探图片字节,所以照样能显示,但会校验媒体类型的 API 可能会拒绝它。

Base64 形式的 JPG 还包含我的 GPS 位置吗?

如果原图包含,那就包含。Base64 会复制每个字节,EXIF 也不例外。勾选 移除元数据(EXIF) 即可去掉;照片会在编码前重绘,不带任何元数据。

为什么 JPG 的 Base64 以 /9j/ 开头?

每个 JPEG 都以字节 FF D8 FF 开头,这三个字节的编码恰好是 /9j/。开头不同的字符串就不是 JPEG,不管它的文件名怎么写。

怎样让照片的 Base64 更短?

编码前减少像素、降低质量。把 最大宽度 设为与显示尺寸相当,质量 设在 75–85% 左右,对手机照片的压缩效果远超你对 Base64 本身能做的任何处理。