JPG 转 Base64 工具

将 JPG 和 JPEG 图片编码为 Base64。可以逐字节保留原文件,也可以降低质量、缩小宽度后重新编码,让字符串更短。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 将 .jpg 或 .jpeg 文件拖到上传区域,点击选择文件,或粘贴图片。
  2. 想完全保留原文件,就不要开启转换;想缩小体积,可以选择 JPEG 或 WebP 并调低质量。
  3. 如果照片比实际显示尺寸大,可以设置最大宽度。
  4. 复制所需的输出,例如网页用的 img 标签或 API 用的纯 Base64,也可以下载为文件。

JPEG 简介

JPEG 是照片的标准格式,采用有损压缩,丢弃人眼几乎察觉不到的细节,不支持透明。文件扩展名可能是 .jpg、.jpeg,偶尔是 .jfif,但 MIME 类型始终是 image/jpeg。image/jpg 并不是注册的类型,只是很多浏览器能够容忍。JPEG 的 Data URI 以 data:image/jpeg;base64,/9j/ 开头,这正是“图像起始”标记编码后的样子。

编码前先给照片瘦身

照片是 Base64 代价最大的场景:200 KB 的 JPEG 会变成大约 270 KB 的文本。下面两个设置影响最大:

  • 最大宽度。宽度减半,像素数量就只剩四分之一。手机拍的照片宽达 4000 像素,很少需要这么大。
  • 质量。70% 到 80% 左右在屏幕上通常与原图看不出区别,体积却小很多;质量过低则会出现明显的色块。

以相近质量转换为 WebP,体积往往还能更小。留意每种设置下的编码后大小,选择看起来仍然满意的最小结果。

EXIF 元数据

相机和手机拍摄的照片带有 EXIF 元数据,包括相机型号、拍摄时间,有时还有 GPS 坐标。不开启转换时,Base64 输出包含原始字节和全部元数据,任何人解码后都能读到。如果需要完全一致的文件,例如 API 要校验哈希值或读取拍摄日期,这正是你想要的。

开启转换后,浏览器会重新编码像素,EXIF 数据不会被保留。输出体积更小,也不会再暴露照片的拍摄地点。

什么时候值得使用 JPEG Data URI

适合的场景包括:宽度只有 20 到 40 像素的模糊占位图(先内嵌显示,原图再延迟加载)、JSON 接口中的缩略图,以及单文件 HTML 导出。首页大图和图库应当作为单独文件,方便浏览器缓存。

# Python
import base64
with open('photo.jpg', 'rb') as f:
    uri = 'data:image/jpeg;base64,' + base64.b64encode(f.read()).decode('ascii')

常见问题

JPG 和 JPEG 是一回事吗?

是的。较短的 .jpg 扩展名源于早期只允许 3 个字符扩展名的系统。两者是同一种格式,MIME 类型都是 image/jpeg。

Base64 编码会降低 JPEG 画质吗?

不会。Base64 只是文件字节的无损表示。只有选择转换时,图片才会按你设置的质量重新编码,画质才会变化。

JPEG 的 Data URI 能有透明背景吗?
不能,JPEG 没有 Alpha 通道。需要透明效果时请使用 PNG 或 WebP。
Base64 字符串里会包含照片的拍摄位置吗?

有可能。如果原始 JPEG 的 EXIF 中有 GPS 信息,而你直接编码原文件,位置信息就在字符串里。转换图片会去除 EXIF 元数据。