Favicon 生成器

放一张图进来,把用户设备真正会请求的每个尺寸都吐出去 —— 附带可以直接粘进 head 的 HTML 和 manifest。

拖入一张正方形图片

PNG、JPG、WebP 或 SVG —— 建议 512×512 以上


          
        

          
        

全部在你浏览器里生成。不上传任何内容。

为什么一个 favicon 永远不够

favicon 看起来就是一个 16×16 的小图标。实际上,一个现代网站会被六七个彼此毫无关系的场景索取这个图标,每个场景要的尺寸都不一样。

谁在要什么尺寸

  • 16×16 和 32×32 —— 浏览器标签页和地址栏。在高分屏上,即便是名义上 16 px 的位置,实际被光栅化使用的也是 32 px 那份资源。
  • 48×48 —— Windows 任务栏和桌面快捷方式,也是老代码路径通过 favicon.ico 去取的那一档。
  • 180×180 —— apple-touch-icon,用户把你的网站添加到 iOS 主屏幕时用。
  • 192×192 和 512×512 —— Android 与 web app manifest。512 也会被某些平台用于启动画面和应用商店展示。
  • SVG —— 对浏览器标签页来说,这正日益成为正确答案,因为一个文件就能适配任意像素密度。

只放一个 16×16,上述其余场景就只能放大它。把 16 px 的位图放大到 180 px,得到的就是你预想中的那种糊。

ICO 文件:它是容器,不是格式

这一点经常让人踩坑。favicon.ico 不像 PNG 那样是一种图片格式,它是一个小型容器,可以装下多张不同分辨率的图片。历史上它装的是 BMP 数据;自 Windows Vista 起可以装 PNG,这也是现代生成器的做法,所以一个构建得当的 ICO 会比它各组成部分的体积之和还小。

在页面没有声明图标时,浏览器仍然会默认去请求 /favicon.ico。正因为有这个默认行为,你要么提供这个文件,要么显式声明图标——否则每个访客都会在你的日志里留下一条 404,永久地。

苹果那个图标是最别扭的

iOS 会给 apple-touch-icon 套上圆角遮罩,老版本系统还会加一层高光。它不会帮你补白边。如果你的图标内容顶到了边缘,iOS 就会把它裁掉。解决办法是:产出这一档尺寸时,在四周预留百分之几的透明边距——这也正说明了,为什么"自动居中裁一个正方形"并不总是 180 px 这一档的理想做法。

manifest,以及它超出图标之外的意义

manifest.webmanifest 声明你的图标集、名称、配色和显示模式。有了它,Android 才会提供"添加到主屏幕",基于 Chromium 的桌面浏览器才会提供"安装"。没有它,你只有图标,而没有一个可安装的应用。图标条目需要同时给出 192 和 512;如果你有 maskable 变体,512 那份应当标上 "purpose": "any maskable",否则 Android 会以不可预期的方式裁剪它。

更新不生效这个老大难

Favicon 的缓存非常激进——有时比你网站其他部分都激进。只换文件不改 URL,访客往往几周内看到的仍是旧图标。每次换图标都请改 URL:加一个版本号查询串(/favicon-32.png?v=2),或者干脆改文件名。同理,如果你想确认某个社交平台缓存了你网站的什么内容,那是另一套独立缓存,要用它自己的调试工具。

怎么选源图

请用正方形素材起步,最好 512×512 或更大,并且重要内容要离边缘留一距离。在 512 上能看清的细节,到 16 尺寸一定会消失——缩不小还好看的 favicon,都是用粗壮的剪影搭出来的,而不是精细的插画。如果你手上只有精细版 logo,建议为小尺寸单独做一个简化变体,而不是接受一团糊。

常见问题

源图要多大?
至少 512×512 且为正方形。更大也没问题——本工具只会缩小、不会放大,所以更大的源图不会产出更差的结果。非正方形的源图会被居中裁成正方形,如果你的主体不在正中,记得看一眼预览。
真的需要这么多尺寸吗?
个人项目的话,务实的最小集是:一个给浏览器的 SVG,加一个 180×180 给 iOS。面向公众的项目,完整一套也就多几 KB,却能省掉一整类"我手机上看着是坏的"这类反馈。
什么是 maskable 图标?
Android 可能会给图标套自己的遮罩——圆形、超椭圆、圆角方形——并且可能裁到安全区的边缘。maskable 图标把重要内容留在中央安全区内,因此能扛住任意一种遮罩。如果你提供了这种变体,请在 manifest 中用 "purpose": "maskable" 声明。
为什么我的图标在高分屏上是模糊的?
原因几乎总是:只存在 16×16 那份资源,然后被放大了。请同时提供 32×32,并为浏览器标签页优先提供 SVG——它天然与分辨率无关。
我换了文件,访客还是看到旧图标。
Favicon 缓存很激进,且各浏览器策略不同。请改 URL 而不只是改文件:加版本号查询串,或者重命名文件。开发时清自己的浏览器缓存,并不是你的访客能享受到的解决办法。