# JavaScript 头像库
该库使用 [TypeScript](https://www.typescriptlang.org/) /
[JavaScript](https://developer.mozilla.org/en-US/Web/JavaScript) 编写,可用于
浏览器以及 [Node.js](https://nodejs.org/en/)(22 版
或更高版本)。在其他环境中,你可能会对以下内容感兴趣:
[PHP 库](https://dicebear.zhcndoc.com/how-to-use/php-library/),
[Python 库](https://dicebear.zhcndoc.com/how-to-use/python-library/),
[Rust 库](https://dicebear.zhcndoc.com/how-to-use/rust-library/),
[Go 库](https://dicebear.zhcndoc.com/how-to-use/go-library/),
[Dart 库](https://dicebear.zhcndoc.com/how-to-use/dart-library/),
[HTTP API](https://dicebear.zhcndoc.com/how-to-use/http-api/)
或 [CLI](https://dicebear.zhcndoc.com/how-to-use/cli/)。
该库是一个纯 [ESM 包](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules)。
如果你是 ESM 包新手, [Sindre Sorhus](https://github.com/sindresorhus) 写了一份很棒的 [帮助页面](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c)。
## 安装
你需要两个包:核心库 `@dicebear/core` 和头像样式定义 `@dicebear/styles`。
```
npm install @dicebear/core @dicebear/styles
```
## 使用
我们在示例中使用头像样式 [lorelei](https://dicebear.zhcndoc.com/styles/lorelei/)。你可以在 [这里](https://dicebear.zhcndoc.com/styles/) 找到更多头像样式。
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar = new Avatar(style, {
seed: 'John',
// ... 其他选项
});
const svg = avatar.toString();
```
每种头像样式都带有若干选项。你可以在每个 [头像样式](https://dicebear.zhcndoc.com/styles/) 的详情页找到它们。
> [!TIP]
> 如果你想将该库集成到某个框架中,请查看我们为 [Angular](https://dicebear.zhcndoc.com/guides/use-the-library-with-angular/)、
> [React](https://dicebear.zhcndoc.com/guides/use-the-library-with-react/)、
> [React Native](https://dicebear.zhcndoc.com/guides/use-the-library-with-react-native/)、
> [Vue](https://dicebear.zhcndoc.com/guides/use-the-library-with-vue/) 或
> [Svelte](https://dicebear.zhcndoc.com/guides/use-the-library-with-svelte/) 提供的指南。
> [!NOTE]
> 我们提供了来自不同创作者的大量头像样式。这些头像样式采用不同的许可证,创作者可以自行选择许可证。为了便于快速了解,我们为你创建了[许可证概览](https://dicebear.zhcndoc.com/licenses/)。
## 确定性头像
`seed` 选项是生成确定性头像的关键。相同的 seed
将始终生成相同的头像,这对用户资料很有用:
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
// 这些将始终生成相同的头像
const avatar1 = new Avatar(style, { seed: 'user-123' });
const avatar2 = new Avatar(style, { seed: 'user-123' });
avatar1.toString() === avatar2.toString(); // true
```
## 类
### `Avatar`
生成头像的主类。传入一个 `Style` 实例和可选的
选项。
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar = new Avatar(style, {
// ... 选项
});
```
### `Style`
围绕样式定义的不可变包装器。
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar1 = new Avatar(style, { seed: 'Alice' });
const avatar2 = new Avatar(style, { seed: 'Bob' });
```
### `OptionsDescriptor`
描述给定样式的所有有效选项。适用于构建用户界面或验证用户输入。有关详细信息,请参阅
[访问样式选项](https://dicebear.zhcndoc.com/guides/access-all-available-options/)。
## 方法
### `.toString()`
**返回类型:** `string`
以 XML 格式返回 SVG 头像。
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar = new Avatar(style, {
// ... 选项
});
const svg = avatar.toString();
```
### `.toJSON()`
**返回类型:** `{ svg: string, options: StyleOptions }`
返回一个对象,其中包含用于生成头像的 SVG 和解析后的选项。
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar = new Avatar(style, {
seed: 'John',
// ... 其他选项
});
const json = avatar.toJSON();
// 示例输出:
// {
// svg: '',
// options: {
// seed: 'John',
// // ... 解析后的选项
// }
// }
```
### `.toDataUri()`
**返回类型:** `string`
以 [数据 URI](https://en.wikipedia.org/wiki/Data_URI_scheme) 格式返回头像。
这对于将头像直接嵌入 HTML 或 CSS 非常有用。
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar = new Avatar(style, {
seed: 'John',
// ... 其他选项
});
const dataUri = avatar.toDataUri();
// 在 HTML 中使用
//
```
## 选项
每个 DiceBear 核心都支持相同的选项。完整参考(包括背景、组件级和颜色级选项)请参阅
[核心选项](https://dicebear.zhcndoc.com/guides/core-options/)页面。以下示例展示了如何在 JavaScript 中传递这些选项。
## 示例
### 带自定义背景的头像
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const avatar = new Avatar(style, {
seed: 'John',
backgroundColor: ['#b6e3f4', '#c0aede', '#d1d4f9'],
// ... 其他选项
});
```
### 固定尺寸头像
```js
import { Style, Avatar } from '@dicebear/core';
import bottts from '@dicebear/styles/bottts.json' with { type: 'json' };
const style = new Style(bottts);
const avatar = new Avatar(style, {
seed: 'robot-42',
size: 128,
borderRadius: 50, // 圆形头像
// ... 其他选项
});
```
### 带变换的头像
```js
import { Style, Avatar } from '@dicebear/core';
import avataaars from '@dicebear/styles/avataaars.json' with { type: 'json' };
const style = new Style(avataaars);
const avatar = new Avatar(style, {
seed: 'Jane',
flip: 'horizontal',
rotate: 10,
scale: 0.9,
translateY: 5,
// ... 其他选项
});
```
### 同一页面上的多个头像
当将多个头像内联到同一个文档中时(例如直接把 SVG 标记插入页面,而不是使用 `
`),请使用
`idRandomization` 为每个 SVG 的内部 ID 添加后缀,以避免 `` /
`url(#…)` 冲突:
```js
import { Style, Avatar } from '@dicebear/core';
import lorelei from '@dicebear/styles/lorelei.json' with { type: 'json' };
const style = new Style(lorelei);
const users = ['alice', 'bob', 'charlie'];
const avatars = users.map((user) =>
new Avatar(style, {
seed: user,
idRandomization: true,
// ... 其他选项
}).toString(),
);
```
后缀取自 `Math.random()`(**不是** DiceBear PRNG),因此使用相同 seed 渲染的两个头像会得到不同的 ID。这也意味着渲染出的 SVG 不再是确定性的;只有视觉输出是。对于快照测试、SSR/hydration,或任何依赖完全相同标记的场景,请跳过 `idRandomization`。当你只是通过 `
`(data URI 或 HTTP API)嵌入头像时,ID 位于彼此隔离的文档中,因此不需要 ID 随机化。
### 带权重的变体选择
你可以通过传入权重映射来影响 PRNG 以偏好某些变体。
映射中未列出的变体会被排除;权重为 `0` 的变体也会被排除,除非**所有**映射的变体权重都为 `0`,在这种情况下,PRNG 会回退为在这些变体上进行无权重选择:
```js
import { Style, Avatar } from '@dicebear/core';
import avataaars from '@dicebear/styles/avataaars.json' with { type: 'json' };
const style = new Style(avataaars);
const avatar = new Avatar(style, {
seed: 'John',
topVariant: { short01: 2, short02: 2, long01: 1 },
// ... 其他选项
});
```
## 可访问性
默认情况下,生成的 `