把 PNG 转成 Base64

用于透明图标与 UI 资源:把 PNG 编码成样式表或 JSON 载荷恰好需要的那种字符串。

图片用 FileReader 在本地读取,不会上传。

什么时候会用到

  • 把透明图标内联进 CSS,省掉一次请求,也方便换色。
  • 把 UI 资源嵌进某个组件库的主题文件里。
  • 造一个带着图片、又不想附带二进制附件的测试夹具。

别的 Base64 工具为什么在这里失败

有些工具输出的前缀里永远写 image/jpeg,于是透明 PNG 被声明成 JPEG,浏览器表现就开始飘。

有些在「优化」时顺手抹掉了 PNG 的透明通道,而这恰恰是选用 PNG 的全部理由。

输出经常干脆没有前缀,而 src 属性里恰恰最需要它。

常见问题

转换会保留透明通道吗?

会,逐字节保留。编码路径完全不碰像素数据 —— 文件按 array buffer 读入后直接 Base64 编码。预览区背后的棋盘格底纹就是为了让你确认透明区域真的是透明的。

前缀写的是 image/png,但浏览器表现有点怪。

先确认前缀是否与真实文件一致。本工具的 MIME 取自文件的实际类型,而不是扩展名。一个实际是 JPEG 却叫 .png 的文件会被标成 image/jpeg —— 这是正确且有用的行为。

PNG 该用 Data URI 还是独立文件?

小的透明图标用 Data URI,因为多出的字节比省下的那次请求便宜。照片、或者任何超过几 KB 的东西用独立文件,因为 Data URI 无法单独缓存、无法懒加载,而且在解码期间会阻塞解析器。

能一次编码多张 PNG 并一起下载吗?

可以。选中多个文件后,批量视图会逐个编码,你可以逐个复制或下载,也可以把整批作为一个文本包拿走。

相关工具