空白头像

占位头像 API

面向开发和生产环境的免费占位头像,无需密钥。把图片地址填进图片标签,几百字节即可拿到干净的确定性 SVG。无需注册,也无需安装任何东西。

https://blankpfp.com/api/avatar

实时示例

下面所有图片都由本页介绍的接口实时返回。

快速开始

把地址直接写进图片标签即可。尺寸单位为像素,默认形状为圆形,无需额外样式。

<img src="https://blankpfp.com/api/avatar/seed/alice/200" alt="Alice" width="200" height="200">

或者用作 CSS 背景:

.avatar {
  width: 96px;
  height: 96px;
  border-radius: 50%;
  background-image: url("https://blankpfp.com/api/avatar/seed/alice/96");
  background-size: cover;
}

在 JavaScript 中,用能标识用户的信息拼出地址:

avatar.src = 'https://blankpfp.com/api/avatar/seed/' + encodeURIComponent(user.email) + '/200';

地址格式

这四种形式都可以省略高度。在任意形式后加上 .json,即可返回下文介绍的元数据而不是图片。

地址 返回内容
/api/avatar/{width} 正方形头像。同一地址始终返回同一张图片。
/api/avatar/{width}/{height} 非正方形画布,适合宽幅横幅或故事头像。
/api/avatar/seed/{seed}/{width} 由任意种子字符串推导出的确定性头像。
/api/avatar/id/{id}/{width} 由数字 ID 推导出的确定性头像,例如数据库记录。

确定性种子

种子会被哈希为 48 色调色板中的一种颜色,因此同一个种子永远返回同一张头像,无需数据库,也不落盘。可以使用用户名、邮箱或记录 ID。含空格或符号的种子需要做百分号编码,/api/avatar/id/ 则是数字 ID 的简写。

<img src="https://blankpfp.com/api/avatar/seed/alice/200" alt="alice">\n<img src="https://blankpfp.com/api/avatar/seed/bob/200" alt="bob">\n<img src="https://blankpfp.com/api/avatar/id/237/200" alt="record 237">

查询参数

所有参数都是可选的,可以任意组合。遇到无法识别的取值会返回 400 并附带 JSON 说明,而不是一张坏图。

参数 可选值 默认值 返回内容
shape circle | rounded | square circle 头像外形。默认是圆形,因为多数平台都会这样裁剪头像。
pattern solid | grid | dots | diagonal | checker solid 叠加在背景上的纹理,便于一眼区分不同类型的占位图。
bg #1E3A5F seed 背景颜色。会覆盖种子原本对应的颜色。
fg #1E3A5F auto 首字母、纹理线和剪影的颜色;省略时自动选取以保证对比度。
initials 1-2 - 最多两个字母、数字或符号,居中绘制。填入全名会自动缩写为首字母。
figure 1-15 - 剪影 id(1-15)或名称,用 fg 的颜色画在 bg 上。优先于首字母;单独写 ?figure 可清除。
outline 0 | 1 0
grayscale 0 | 1 0 去除所有颜色,适合灰度、禁用等界面状态。
blur 0-10 0 高斯模糊半径。模糊限制在图形内部,边缘依然清晰。
random ?random=* - 任意取值。用于返回与固定结果不同的头像。

十六进制颜色可带可不带 # 前缀,#abc 这样的三位简写会自动展开。不填 bg 时背景来自种子;不填 fg 时墨色会自动选取以保证可读性。 模糊值超过上限时会自动收敛到上限而不是报错;首字母不会超过两个。

剪影

与生成器相同的 15 个半身剪影,可按 id 或名称取用。fg 控制剪影颜色、bg 控制背景颜色,同一个 id 换配色就是另一种效果。

Solid fill

Hollow outline (outline=1)

亲自试一下

选中页面上的任意头像,然后在下面改参数。预览和代码会同步更新,复制到的就是接口真实返回的内容。

预览

背景
前景

URL

返回格式

图片以 SVG 返回,一个普通头像通常只有 200 到 1000 字节,在任何像素密度下都清晰。给同一地址加上 .json 可以改为读取解析后的颜色,方便让界面配色与头像保持一致。

{
  "ok": true,
  "mode": "seed",
  "seed": "alice",
  "width": 200,
  "height": 200,
  "shape": "circle",
  "pattern": "solid",
  "figure": null,
  "background": "#9CA3AF",
  "foreground": "#111827",
  "initials": null,
  "outline": false,
  "grayscale": false,
  "blur": 0,
  "format": "svg",
  "bytes": 266,
  "url": "https://blankpfp.com/api/avatar/seed/alice/200/200.svg",
  "info": "https://blankpfp.com/api/avatar/seed/alice/200/200.json"
}

无效请求会返回 400 及 JSON 内容:

{
  "ok": false,
  "error": "invalid_parameters",
  "errors": ["pattern: expected one of solid, grid, dots, diagonal, checker"],
  "docs": "https://blankpfp.com/docs"
}

缓存与限制

带种子的地址是其自身的纯函数,因此会带上一年期不可变缓存头和 ETag。在应用前放一层 CDN,首个请求之后图片就不再消耗流量。宽高可取 16 到 2048 像素;超过上限会被收敛而不是报错,解析后的尺寸会在 JSON 中返回。若希望每次请求都不同,可在地址后加 ?random= 加任意取值。

常见问题

需要 API 密钥或账号吗?

不需要。没有注册、没有密钥,也没有调用配额。本页的每个地址都可以直接使用。

同一个地址会一直返回同一张头像吗?

会。带种子的地址是其自身的纯函数,可以放心写死在代码、数据库或测试里。不带种子的地址在同一地址下也保持稳定,?random= 则是显式关闭这一行为的方式。

可以外链这些图片并商用吗?

可以。图片由我们自己的服务器基于矢量图形生成,不涉及第三方照片、没有版权顾虑,也不需要署名。可以直接外链,也可以下载使用。

为什么用 SVG?尺寸限制是多少?

SVG 头像通常只有几百字节,可任意缩放,还能用 CSS 重新着色。宽高可取 16 到 2048 像素,超过 2048 会被收敛。

相关工具