☰
SuperTinyIcons 极简 SVG Logo 图标库:从 1KB 体积约束到安装使用与源码校验全解析
2026/10/3 8:30:21 网站建设 项目流程
  • 前端
  • UI组件

【免费下载链接】SuperTinyIcons

Under 1KB each! Super Tiny Icons are miniscule SVG versions of your favourite website and app logos

项目地址:https://gitcode.com/gh_mirrors/su/SuperTinyIcons
点击查看免费下载

SuperTinyIcons 是一套以“每个 SVG Logo 体积小于 1KB”为硬性约束的开源图标库,当前仓库共收录 479 个网站与应用的极简 Logo,平均体积不到 534 字节。本文以 README.md 为主线,结合 check.py、test/test.js 与 src/sti 生成器源码,系统讲解它的体积压缩原理、图标提交规范、无障碍实现、npm 安装方式与 Web/React/CSS 使用技巧,帮助你在自己的项目中低成本引入这套图标,并能看懂它背后的一整套校验与生成机制。

项目核心:小于 1KB 的 Logo 是怎么做到的

SuperTinyIcons 的核心目标写在项目描述里:每个图标必须小于 1KB。这不是一句口号,而是贯穿整个仓库的硬性验收标准。

所有 Logo 文件都存放在 images/svg 目录(共 479 个 SVG),它们统一具备以下几何约定:

  • 使用512×512 的 viewBox坐标系;
  • 图标主体必须适配半径为 256 像素的圆形,即整体落在 512×512 正方形内切圆之内;
  • 因为是矢量图形,图标可以无限放大缩小而不失真,既能做 16px 的 favicon,也能做 100px 的品牌展示。

以仓库中真实的体积对比为例:

527 字节 SVG3,328 字节 PNG352 字节 SVG2,987 字节 PNG235 字节 SVG1,615 字节 PNG
GitHub 527BGitHub PNG 3.3KBTwitter 352BTwitter PNG 2.9KBFlickr 235BFlickr PNG 1.6KB

同样的 Logo,SVG 版本比 PNG 位图小一个数量级,而仓库中大部分图标(如 Vercel 仅 180 字节、Bandcamp 仅 188 字节)又远小于 1KB 上限。

为什么追求“小”:字节即成本

原文档给出了非常直白的理由:字节是要花钱的——存储要花钱、网络传输要花钱、解析渲染也要消耗时间。SVG 是文本格式,路径越精简、属性越少,体积就越小。Simplicity(简洁)应当成为所有工程实践追求的目标。这正是该图标库把“体积”而非“美观丰富”放在第一优先级的原因:在保证 Logo 可辨识的前提下,尽可能压缩每一个字节。

压缩手法:体积从何而来

README 说明,这些文件由人工在 Inkscape、Illustrator 或纯文本编辑器中绘制,再经过多轮压缩工具处理(SVG Path Editor、svgo、svgcleaner 等)。结合仓库文件实际内容,可以总结出几类关键技巧:

1. 保留必要的xmlns命名空间

每个 SVG 的<svg>标签上都保留xmlns="http://www.w3.org/2000/svg"。这在技术上并非严格必需,但某些 Web 浏览器在把 SVG 作为图片渲染时不带它会显示失败,所以保留它是兼容性代价,属于“不能省”的字节。

2. 省略背景色

图标默认是透明的,背景色可以在使用时由页面统一提供(例如放在圆形或圆角容器中)。如果项目里已有背景色,就可以进一步删掉fill背景路径。

3. 简化颜色写法

颜色值可以被简化,例如#FF0000写成red,直接省下 4 个字符。

4. 降低路径精度

绝大多数图标路径的小数位数为0 位,只有少数 Logo 为了观感精度保留 1~2 位小数(如 GitHub 图标中的m0 0H512V512H0这种整数路径)。在可接受范围内继续降低精度,能进一步缩小体积。

5. 单行路径、极简结构

看一个真实的压缩成果——images/svg/github.svg 全文仅 4 行、527 字节:

<svg xmlns="http://www.w3.org/2000/svg" aria-label="GitHub" role="img" viewBox="0 0 512 512"><path d="m0 0H512V512H0" fill="#181717"/><path fill="#fff" d="M335 499c-13 0-16-6-16-12l1-70c0-24-8-40-18-48 57-6 117-28 117-126 0-28-10-51-26-69 3-6 11-32-3-67 0 0-21-7-70 26-42-12-86-12-128 0-49-33-70-26-70-26-14 35-6 61-3 67-16 18-26 41-26 69 0 98 59 120 116 126-7 7-14 18-16 35-15 6-52 17-74-22 0 0-14-24-40-26 0 0-25 0-1 16 0 0 16 7 28 37 0 0 15 50 86 34l1 44c0 6-3 12-16 12-14 0-12 17-12 17H347s2-17-12-17Z"/></svg>

一个完整 Logo 只用一个<path>的d属性画完主体轮廓,颜色仅两个fill值,这正是“字节成本”理念的极致体现。

尺寸校验背后的自动化:源码如何保证“小于 1KB”

“小于 1024 字节”不是口头承诺,而是被代码强制执行的。仓库里有两条独立的校验链路:

1. Python 全量校验脚本 check.py

check.py会遍历 images/svg 下所有文件,执行一系列检查:

  • 文件类型:必须是.svg后缀;
  • XML 合法性:使用xml.etree.ElementTree解析,非法文件直接报错;
  • 格式规范:自动把 CRLF 换成 LF、双空格换成单空格、去掉结尾多余换行,并强制要求文件第 2 行以aria开头、第 3 行是viewBox="0 0 512 512"(DuckDuckGo 例外,因为它的画布几何不同);
  • W3C 标准校验:启动仓库内置的 Nu Validator(test/vnu.jar,需 JDK 17+),把 SVG 包进一个最小 HTML 文档后 POST 到本地 8888 端口,任何校验错误都会导致失败;
  • 体积上限:每个文件st_size必须 ≤ 1023 字节,否则输出Files must be under 1,024 Bytes并置失败标志;
  • 引用完整性:每个图标必须在 images/reference 目录下同时存在对应的.url引用文件和 PNG/JPG/SVG 参考图(如github.url、github.png)。

运行方式:

uv run check.py # 或 python3 check.py

全部通过时会输出:✅ All files in the correct format and under 1,024 Bytes.

2. Node.js 测试 test/test.js

配合npm test(底层为 mocha + chai),对变更文件逐项断言:

  • 文件大小必须lessThan(1024);
  • 将 SVG 包装为 HTML 后提交到 Nu Validator 在线服务,响应必须为空字符串(无错误)。
it("should be under 1KB", () => { expect(fs.statSync(filepath).size).to.be.lessThan(1024) })

也就是说,任何人新增或修改一个图标,都会被这两套自动化工具按同样标准把关。

提交新图标:规则、模板与无障碍

如果你希望为仓库贡献新 Logo,原文档明确了三条硬性规则,缺一不可:

  1. 文件必须小于 1024 字节(最大 1023 字节),没有讨价还价的余地;
  2. 必须能放进半径 256 像素的圆内,可用rx="50%"自行检查;
  3. 必须代表某个流行服务的当前官方 Logo。

最小模板

至少需要以下组成部分:

<svg xmlns="http://www.w3.org/2000/svg" aria-label="..." role="img" viewBox="0 0 512 512"><path d="m0 0H512V512H0" fill="#fff"/> ... </svg>

无障碍(Accessibility)是默认内置的

每个图标天生具备无障碍属性(源码 src/sti/utils.py 的Icon类也会读取并保留它):

  • role="img":让<svg>在浏览器无障碍树中被识别为图片;
  • aria-label="XYZ":用品牌名给图标提供可读名称。

特别注意:如果通过<img src="...svg">方式引用,浏览器不会识别 SVG 内部的 ARIA,此时仍应在<img>上写alt属性。

尺寸指南图:绿、黄、红三区

提交前请对照官方尺寸指南(见 images/guidelines/guideline.svg)排版:

  • 绿色:安全区,图标主体应放在这里;
  • 黄色:相当于“路肩”,用于容纳需要伸出主体的元素(如角标、装饰件);
  • 红色:禁区,图标不能触及;红色圆圈同时也表示圆形裁剪后的最终呈现效果。

遵循这套分区,无论前端最终用什么圆角/圆形裁剪,图标观感都不会被破坏。

安装与使用:npm 包与四种接入方式

安装

npm install --save super-tiny-icons

包体积配置见 package.json 的files字段——发布时仅包含images/svg/目录,非常轻量。

方式一:传统<img>直接引用

<img src="./node_modules/super-tiny-icons/images/svg/github.svg" />

方式二:React / JSX 模块化导入

import logo from "super-tiny-icons/images/svg/github.svg"; <img src={logo} />;

方式三:CSS 自定义尺寸与形状

图标是矢量,尺寸完全由 CSS 控制,常见的方形/圆角/圆形三种容器只需改width与border-radius:

<style> .small-square { width: 20px; } .medium-rounded { width: 50px; border-radius: 10%; } .large-circular { width: 100px; border-radius: 50%; } </style> <img src="images/svg/reddit.svg" class="small-square" /> <img src="images/svg/reddit.svg" class="medium-rounded" /> <img src="images/svg/reddit.svg" class="large-circular" />

因为图标本身设计成适配 256 半径圆,border-radius: 50%这种圆形裁剪下边缘元素也不会被切坏。

方式四:Android Vector Drawable

除 SVG 外,仓库还提供 images/android-vector-drawable 目录下的Android Vector Drawable版本(如github.xml、android.xml),可直接用于 Android 应用的drawable资源。注意:这类 XML 格式不保证小于 1KB。

仓库自带的站点与图集生成器

除了图标本身,仓库的 src/sti 目录还包含一个完整的 Python 工具链,用于把 479 个图标汇总成可浏览的页面和图集:

  • src/sti/utils.py:Icon数据类负责解析每个 SVG 的viewBox、aria-label、文件大小,并统计全库的最小/最大/平均/总字节数(get_icons_from);
  • src/sti/app.py:基于 Flask 的 Web 应用,路由渲染index.html、libraries.html、reference.html等页面,并提供/atlas.svg(整张图集)与/mxlibrary.xml(draw.io 素材库)端点;
  • src/sti/atlas.py + src/sti/cli.py:命令行生成器,可一键输出atlas.svg(一个文件容纳全部图标,通过:target选择器切换显示,模板见 src/sti/templates/atlas.svg)以及 draw.io 可直接导入的atlas.drawio文件:
python -m sti.atlas --format svg # 输出整张 SVG 图集 python -m sti.atlas --format drawio # 输出 draw.io 素材库

这意味着这套图标不仅是静态资源,还可以被程序化地汇总、统计、转成其他设计工具可用的格式。

许可证与合规说明

绝大多数矢量 Logo 基于他人作品重绘,仓库在 README.md 的 Licenses 一节逐一列出了来源与许可证(如 Aha-Soft 的 CC-BY、RSS 的 MPL 1.1、Mastodon 的 AGPLv3、Docker 的 Apache 等,部分来自 SVGporn 的 CC0 素材)。凡能保留原始许可证的都尽量保留。需要提醒的是:部分 Logo 可能仍受版权与商标法保护,但正如原文档所说,这些文件已经小到“可以整段记进内存”,使用时应自行评估商标展示场景的合规要求。

结语

SuperTinyIcons 的价值不在于“好看”,而在于把512×512 矢量 Logo 压缩到 1KB 以内这条反直觉的工程约束贯彻到底:几何上适配圆形裁剪、结构上精简到单路径、流程上由 check.py 和 test/test.js 双重自动化把关。如果你正在为站点、文档、移动端或桌面工具寻找一组体积友好、开箱即用且带无障碍支持的多品牌 Logo,这套仓库既可以直接通过npm install super-tiny-icons使用,也可以按 CONTRIBUTING.md 的流程提交你自己的 1KB 作品。

  • 前端
  • UI组件

【免费下载链接】SuperTinyIcons

Under 1KB each! Super Tiny Icons are miniscule SVG versions of your favourite website and app logos

项目地址:https://gitcode.com/gh_mirrors/su/SuperTinyIcons
点击查看免费下载
上一篇:Windows效率革命:5个PowerToys神器让你每天多出1小时
下一篇:PCL2启动器内存配置:从基础概念到高级调优

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询