PNG 转 Base64 工具

将 PNG 文件编码为 Base64,透明背景完整保留。拖入或粘贴 PNG,即可复制为 Data URI、HTML img 标签、CSS 背景或 Markdown 图片。

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

使用方法

  1. 将 PNG 拖到上传区域,点击选择文件,或从剪贴板粘贴截图。
  2. 保持原格式即可编码 PNG 的原始字节;图片过大时,可以设置最大宽度缩小尺寸。
  3. 对比页面显示的原始大小和编码后大小。
  4. 复制或下载 Data URI、纯 Base64、img 标签、CSS 或 Markdown 输出。

PNG 与 Base64

PNG(便携式网络图形,MIME 类型为 image/png)是一种无损位图格式,支持完整的 Alpha 透明通道,因此常用于图标、Logo、示意图和截图。所有 PNG 文件都以相同的 8 字节签名开头,所以 PNG 的 Data URI 也总是以 data:image/png;base64,iVBORw0KGgo... 开头。

Base64 不会改动任何像素。解码后得到的文件与原文件逐字节相同,颜色和透明区域都完全一致。

适合使用 PNG Data URI 的场景

  • 需要透明背景的小型界面图标和 Logo。
  • 嵌入自包含 HTML 报告、缺陷报告或导出文档中的截图。
  • 服务器生成后通过 JSON 返回的图表和二维码。
  • 由 canvas.toDataURL() 生成的图片,它默认输出的就是 PNG 格式的 Data URI。

照片则另当别论。PNG 以无损方式保存照片,文件会很大,改用 JPEG 或 WebP 得到的字符串会短得多。

编码前先压缩 PNG

PNG 每减少 1 个字节,Base64 就少大约 1.33 个字符。编码前可以先用 oxipng、zopflipng(无损)或 pngquant(减少调色板颜色)优化文件。也要检查像素尺寸:按显示尺寸 3 倍导出的图标,通常可以用“最大宽度”选项缩小。

转换为 WebP 能保留透明度,体积往往小很多;转换为 JPEG 会去掉透明度,透明区域会变成纯色。浏览器重新编码 PNG 时并不会做压缩优化,结果可能比优化过的原图更大,复制前请先对比大小。

使用输出结果

<img src="data:image/png;base64,iVBORw0KGgo..." width="24" height="24" alt="设置">

.icon-settings {
  background: url("data:image/png;base64,iVBORw0KGgo...") no-repeat center / 24px 24px;
}

# 命令行:GNU coreutils / macOS
base64 -w 0 icon.png
base64 -i icon.png

常见问题

Base64 会保留 PNG 的透明背景吗?

会。Base64 原样编码文件字节,Alpha 通道不受影响。只有把图片转换为 JPEG 时才会失去透明度。

为什么 PNG 的 Base64 总是以 iVBORw0KGgo 开头?

这几个字符就是 PNG 文件签名的 Base64 形式。如果一个号称 PNG 的字符串开头不同,那它要么是其他格式,要么已经损坏。

可以直接粘贴截图吗?
可以。复制截图后在页面上粘贴即可。浏览器通常会把粘贴的截图作为 PNG 处理,因此得到的是 data:image/png 结果。
多大的 PNG 适合嵌入为 Base64?

常见的经验是几 KB,最多 10 KB 左右。更大的图片最好作为单独文件提供,这样浏览器可以缓存并并行加载。