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

图片转 Base64 在线转换器

拖入、粘贴或选择一张图片,即可复制为 data URI、CSS 背景、<img> 标签、Markdown 或 JSON。缩放和格式转换在编码前进行,都在你的浏览器中完成。

免费 无需注册,不限次数 本地 不上传任何内容 缩放 编码前可转换格式、移除 EXIF 更新于 2026年10月27日
将图片拖到这里、粘贴或选择图片
输入 –输出 –大小 –

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

如何把图片转为 Base64

  1. 把图片拖到框中,用 Ctrl+V(Mac 上是 Cmd+V)从剪贴板粘贴,或使用文件选择器。截图可以直接从剪贴板粘贴;一次处理多个文件也没问题。
  2. 可以先缩小或转换格式:在 最大宽度 中输入像素值,在 转换为 中选择 PNG、JPEG 或 WebP,设置 质量,或勾选 移除元数据(EXIF)。
  3. 在 输出为 中选择格式。此页默认是 Data URI。
  4. 按 复制输出;结果很长时可以按 另存为 .txt。

预览会显示文件名、大小、MIME 类型和像素尺寸。按钮下方显示输入大小、输出大小和额外开销的百分比,粘贴之前就能心里有数。

输出格式及其用途

每种格式中的 Base64 数据都相同,变的只是外面的包装。下面的示例使用一张名为 logo.png 的 32×32 PNG,内容已缩短:

输出为得到的结果典型用途
纯 Base64iVBORw0KGgoAAAANSUhEUg...JSON 字段、API、数据库
Data URIdata:image/png;base64,iVBORw0K...任何接受 URL 的 src 或 url()
CSS background-imagebackground-image: url("data:image/png;base64,...");样式表、style 属性
HTML <img><img src="data:image/png;base64,..." alt="logo" width="32" height="32">HTML 页面、单文件报表
Markdown![logo](data:image/png;base64,...)允许 data URL 的 Markdown 渲染器
HTML <a download><a href="data:..." download="logo.png">logo.png</a>以下载形式提供文件
JSON{"name": "logo.png", "type": "image/png", "size": 105, "data": "iVBOR..."}测试数据、你自己的上传 API

<img> 输出包含 width 和 height,浏览器可以在图片解码前预留空间。有些 Markdown 渲染器(尤其是托管平台上的)会从图片中去掉 data: URL,依赖 Markdown 输出之前请先确认你用的渲染器。

编码前先缩放和转换

无论输入什么,Base64 都会让体积增加三分之一,所以想得到短字符串,最好的办法是用更小的图片。一张以 300 像素缩略图显示的手机照片,并不需要原始的 4000 像素。把 最大宽度 设为 600,即显示尺寸的两倍,足以在高 DPI 屏幕上保持清晰,省下的空间远超任何编码技巧。

各选项的作用:

  • 最大宽度 只会缩小。更窄的图片保持原尺寸,宽高比始终不变。
  • 转换为 JPEG 会把透明区域填成白色,因为 JPEG 没有 alpha 通道。既要透明又要体积小,请用 WebP。
  • 质量 适用于 JPEG 和 WebP 输出,只要其他选项触发了重新编码就会生效。PNG 是无损格式,会忽略它。
  • 移除元数据(EXIF) 会去掉 GPS 坐标、设备型号和拍摄时间等相机数据。它的原理是重绘图片,所以 JPEG 会按所选质量再压缩一次。
  • 选择 保持原格式 重新编码时,GIF、BMP 和 AVIF 会输出为 PNG,因为浏览器无法从 canvas 生成这些格式。GIF 动图只保留第一帧。
  • Safari 无法编码 WebP。如果在 Safari 中选择 WebP,工具会提示改为生成了 PNG。
  • SVG 文件按原样编码。它本身就是文本,把矢量图栅格化就失去了它的意义。

已经被优化工具压缩过的 PNG,重新编码后可能反而变大。预览会把新大小显示在原大小旁边,复制前请对比一下。

什么时候该内联图片,什么时候不该

data URI 能省掉一次 HTTP 请求,并让所有内容集中在一个文件中。以下情况值得这样做:

  • 几 KB 大小的图标、Logo 和小型 UI 图形,
  • 单文件 HTML 文档,例如报表、离线文档或导出的仪表盘,
  • 真实图片加载期间显示的模糊小占位图,
  • 不方便使用单独文件的测试数据和 JSON 载荷。

对于照片和任何大图,它反而有害。编码后的副本大约大 33%,无法与包含它的 HTML 或 CSS 分开缓存,而且每个嵌入它的页面都要重新下载一遍。样式表中的图片还会拖慢样式表,进而拖慢渲染。loading="lazy" 也帮不上忙:字节已经在文档里了。详见 data URI 的性能;大小计算器 可以在决定之前算出编码后的大小。

电子邮件是个特例。Gmail 和其他几个网页邮箱完全不显示 data URI 图片,所以新闻邮件通常使用托管图片或 CID 附件。参见 电子邮件中的 Base64。

用于 API 和 AI 视觉模型的图片

JSON 没有二进制类型,所以在请求体中接收图片的 API 都要求 Base64。这包括很多能描述、分类图片或识别其中文字的多模态 AI 模型。图片有两种传法:

  • 一个字符串中的完整 data URI:data:image/jpeg;base64,/9j/4AAQ...
  • 一个字段放纯 Base64,另一个字段放媒体类型(image/jpeg)。

前者用 Data URI,后者用 纯 Base64。把 data: 前缀发给只要纯 Base64 的 API,或者反过来,是这类请求被拒绝的常见原因。这些服务通常限制请求大小,而且往往会在服务端把大图缩小,所以编码前先缩放,几乎没有损失就能让请求保持小巧。

可以嵌入的图片格式

格式MIME 类型Base64 开头显示支持
PNGimage/pngiVBORw0KGgo所有浏览器
JPEGimage/jpeg/9j/所有浏览器
GIFimage/gifR0lGODlh(GIF89a)、R0lGODdh(GIF87a)所有浏览器
WebPimage/webpUklGR所有现行浏览器
AVIFimage/avifAAAA,第 9 个字符起为 eXBhdmlmChrome 85+、Firefox 93+、Safari 16.4+
SVGimage/svg+xmlPHN2Zy(<svg)或 PD94bWwg(<?xml )所有浏览器
BMPimage/bmpQk所有浏览器
ICOimage/x-iconAAABAA所有浏览器
HEICimage/heicAAAA,第 9 个字符起为 eXBoZWlj仅 Safari 17+
TIFFimage/tiffSUkqAA 或 TU0AKg仅 Safari

HEIC 和 TIFF 可以正常编码,但它们的 data URI 在 Chrome 和 Firefox 中都显示为破图。HEIC 和 TIFF 页面介绍了替代做法。更多签名见 常见的 Base64 前缀。

用代码实现

在浏览器中,FileReader 可以直接返回 data URI:

function imageToDataUri(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = () => reject(reader.error);
    reader.readAsDataURL(file);
  });
}

在 Python 中,读取字节后自己加上前缀:

import base64, mimetypes

def to_data_uri(path):
    mime = mimetypes.guess_type(path)[0] or "application/octet-stream"
    with open(path, "rb") as f:
        return f"data:{mime};base64,{base64.b64encode(f.read()).decode()}"

更多写法(包括大文件的流式处理)见 JavaScript 中的 Base64 和 Python 中的 Base64。

图片显示不出来时

  • HTML 中显示破图。 生成 data URI 时请取消勾选 URL 安全(- _)。浏览器只按标准字母表解码 data: URL,用 - 或 _ 代替 + 或 / 会让图片损坏。
  • HTML 中正常,CSS 中失效。 每 76 字符换行 会在字符串中插入换行。HTML 属性能容忍换行,但 CSS url("...") 字符串中的换行会让该规则失效。除电子邮件正文外,请始终关闭换行。
  • 前缀重复。 以 data:image/png;base64,data:image/png;base64, 开头的字符串,是把 data URI 粘贴进了一个会自动添加前缀的模板。这种情况请使用 纯 Base64。
  • 解码后图片不对或没有图片。 对照上表检查开头几个字符。如果开头与格式不符,说明字符串被截断或弄混了。Base64 转图片 会显示这些字节的真实身份。

常见问题

怎样把 Base64 图片放进 HTML?

把 输出为 设为 HTML <img>,将结果粘贴到页面中。标签已经包含 data:image/...;base64, 前缀以及图片的宽度和高度。请把自动生成的 alt 文本换成真实的描述。

图片转 Base64 会降低画质吗?

不会。Base64 是一种无损的文本编码,解码后得到的是完全相同的字节。只有使用缩放、转换格式或移除元数据选项时画质才会改变,因为它们会在编码前重绘图片。

为什么 Base64 字符串比图片文件大?

Base64 把每 3 个字节写成 4 个字符,所以输出比文件大约大 33%。输出下方的额外开销数字会显示你这张图片的确切值。公式见 Base64 的体积开销。

可以一次转换多张图片吗?

可以。选择或拖入多个文件,工具会列出它们及其大小。用 显示 查看单个结果,或用 全部复制为 JSON 得到一个数组,其中包含每张图片的名称、类型、大小和 Base64 数据。

能把 Base64 还原成图片文件吗?

能,使用 Base64 转图片。它接受纯 Base64 和完整的 data URI,并可以下载解码后的文件。