如何把 favicon 转为 Base64
- 把
favicon.ico、PNG 或 SVG 拖到框中,或用文件选择器选择。 - 如果是 PNG,把 最大宽度 设为 32(或 48),免得不小心内联了一个 512 像素的应用图标。ICO 和 SVG 文件按原样编码。
- 输出为 已设为 Data URI。复制后粘贴到
href中:
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">
预览会显示图标及其像素尺寸,粘贴之前就能确认 PNG 是否真的是 32×32。
ICO、PNG 还是 SVG
| 格式 | MIME 类型 | Base64 开头 | 说明 |
|---|---|---|---|
| ICO | image/x-icon | AAABAA | 一个文件可容纳多种尺寸,每一种都会被内联 |
| PNG | image/png | iVBORw0KGgo | 每个文件一种尺寸,32×32 时很小 |
| SVG | image/svg+xml | PHN2Zy | 可缩放到任意尺寸;Safari 从 26 版起才支持 |
favicon.ico 通常打包了 16×16、32×32 和 48×48 三种图像,它们全都会进入 Base64,所以字符串往往比预期长。对浏览器标签页来说,转换一张 32×32 的 PNG 通常就够了。
SVG favicon 可以在 SVG 内部用 prefers-color-scheme 媒体查询适配深色模式。如果要支持旧版 Safari,请保留一个 PNG 作为后备。
什么时候适合内联 favicon
- 单文件 HTML:导出的报表、离线文档、保存为单个文件的仪表盘。文件一旦移动,相对路径
favicon.ico就指向空处。 - 内部工具和本地服务器,添加一条静态文件路由比写一行 HTML 麻烦得多。
- 动态 favicon:在 canvas 上绘制通知角标或状态颜色,再通过
link.href = canvas.toDataURL("image/png")应用。
普通网站更适合使用单独的图标文件。浏览器只需获取并缓存一次,而内联的 favicon 会在你提供的每个 HTML 页面中重复出现。
用 JavaScript 绘制 favicon
做状态指示器根本不需要文件。在 32×32 的 canvas 上绘制,再把 data URI 赋给现有的图标链接:
const canvas = document.createElement("canvas");
canvas.width = canvas.height = 32;
const ctx = canvas.getContext("2d");
ctx.fillStyle = "#e33";
ctx.beginPath();
ctx.arc(16, 16, 14, 0, Math.PI * 2);
ctx.fill();
document.querySelector('link[rel="icon"]').href = canvas.toDataURL("image/png");
图标没有变化时
- 一直显示旧图标。 浏览器会强力缓存 favicon,而且与页面分开缓存。不使用缓存重新加载,或在隐私窗口中打开页面,就能看到新图标。
- 什么都不显示。 检查
href是否以正确的类型开头:data:image/png;base64,、data:image/x-icon;base64,或data:image/svg+xml;base64,。SVG 图标的根元素还必须带有xmlns属性。 - 有多个
<link rel="icon">标签。 浏览器会按类型和尺寸从中挑选,所以内联图标可能输给另一个声明的图标。把不需要的删掉。
转换回文件
要从 data URI 还原出 favicon.ico,请使用 Base64 转 ICO。对于 SVG 图标,SVG 转 Data URI 还能生成 URL 编码的版本,往往比 Base64 更短。
常见问题
Favicon 可以用 Base64 data URI 吗?
可以。把 data URI 放进 <link rel="icon"> 的 href,例如 href="data:image/png;base64,iVBORw0KGgo..."。浏览器会像对待其他图标 URL 一样处理它。
Base64 的 ICO 应该用哪个 MIME 类型?
image/x-icon 用得最广;image/vnd.microsoft.icon 是正式注册的名称。浏览器两者都接受。本工具使用浏览器为该文件报告的类型。
所有浏览器都支持 SVG favicon 吗?
Chrome 和 Edge 从 80 版起支持,Firefox 从 41 版起,Safari 从 26 版起。如果还要兼容旧版 Safari,请在 SVG 图标旁再加一个 PNG 图标。
怎样阻止浏览器请求 /favicon.ico?
常用的技巧是空的 data URI:<link rel="icon" href="data:,">。这样页面就完全没有图标,测试页面和本地工具用起来很方便。