1986 字
10 分钟

Waline配置--评论区头像

2026-01-31
浏览量 加载中...
AI 智能摘要
AI 正在阅读全文并思考...

注:本文的前一大段部分均为转载(因为偷懒,所以很多图片没有自己放),后半部分自定义随机头像为本人原创:

前半部分原文请看:https://blog.uuanqin.top/p/1d248fa3/

公共头像服务简介#

Gravatar#

是WordPress 母公司 Automattic 推出的一个公共头像服务。你只需要去 Gravatar.com 注册账号绑定自己的域名邮箱,然后上传自己的头像。在逛博客评论的时候,邮箱填写您的域名邮箱,会默认输出你在 Gravatar 上传的头像。

Gravatar 可以说是较知名且应用较广泛的公共头像服务了。Wordpress、GitHub、OpenAI、Figma、Stack Overflow 等网站都在使用 Gravatar 服务。但是由于一些原因,Gravatar 在国内使用体验并不好。

Libravatar#

(Libre Avatar) 是一个免费服务,也是一个开放规范,用于托管与电子邮件或 OpenID 地址绑定的个人图像。

Libravatar 受 Gravatar 启发,并提供了额外的功能:允许域名所有者为自己的组织托管图像。Libravatar API 的使用方式和 Gravatar 很像,在大多数情况下,从 Gravatar 迁移到 Libravatar 只需要改一下域名就行。

如果在 Libravatar 找不到头像怎么办?

  • 如果是通过邮件地址获取不到头像,将重定向至图像链接参数指定的默认头像。例如链接 https://seccdn.libravatar.org/avatar/HASH?d=/static/nobody.jpg 中,d 参数指定了默认头像的位置。
  • 如果是通过 MD5 哈希算法获取不到头像,Libravatar 将首先重定向到 Gravatar 试图获取头像。如果还找不到,就将重定向至图像链接参数指定的默认头像。

Cravatar#

是中国认可的头像(China Recognized Avatar)的缩写,又名「初认头像」,是一款免费的公共头像服务。它具有更快的响应速度,且服务完全架设并运行在中国大陆境内。对于国内用户来说,它是一个 Gravatar 完美的替代品。

Cravatar 使用了三级头像匹配:Cravatar 头像 ->Gravatar 头像 ->QQ 头像,大约 70% 的访客都能得到准确的头像。

Cravatar 会对所有头像进行人工审核(也包括来自 Gravatar 和 QQ 的头像),所有包含暴恐、色情、政治等违反中国法律的内容都会被屏蔽,并返回默认头像。这一点可以分担一些国内站长的审核压力。

头像服务获取头像的基本格式匹配级别
Gravatarhttps://gravatar.com/avatar/HASHGravatar
Libravatarhttps://seccdn.libravatar.org/avatar/HASHLibravatar Gravatar
Cravatarhttps://cravatar.cn/avatar/HASH https://cn.cravatar.com/avatar/HASHCravatar Gravatar QQ 头像

支持的参数:s,size:图像大小 d,default:默认头像


除了使用 ddefault 参数可以指定自己设置的默认头像外,还可以使用服务内置的默认头像:

参数简介
没有指定 d 参数如果图像链接没有指定默认头像,那么将返回这个图像。
404如果没有与电子邮件哈希关联的图像,则不加载任何图像,而是返回 HTTP 404 响应
mp一个简单的卡通风格的人物轮廓。 Libravatar 中还可以使用 mm
identicon一个几何图案(随机生成)
monsterid具有不同颜色、面孔的“怪物”(随机生成)
wavatar具有不同特征和背景的人脸(随机生成)
retro8 位色的像素人脸(随机生成)
robohash具有不同颜色、面部的机器人(随机生成)
pagan复古冒险游戏的角色(随机生成)

Waline 配置头像服务#

通过服务端环境变量配置#

服务端中环境变量 GRAVATAR_STR 指定了获取头像的地址。

环境变量名称Waline 默认值备注
GRAVATAR_STRhttps://seccdn.libravatar.org/avatar/{{mail|md5}}Gravatar 头像的地址,基于 nunjucks 语法。

可以看到 Waline 默认使用 Libravatar 提供的公共头像服务。修改这个值可以切换服务,或增加 d 参数修改默认头像。

下面将演示修改默认头像的方法(假设你使用 Vercel 部署服务端)。

打开 Vercel 中的 Waline 项目,选择 setting->Environment Variables:

我们通过 d 参数指定默认头像为「8 位色的像素人脸(随机生成)」。

点击 Save 后,重新部署 Waline 项目即可。

通过修改 index.js 文件更灵活地配置头像#

通过修改 Vercel 对应的 Github 仓库下的 index.js 文件(或者 index.cjs)可以更灵活指定评论者的头像。具体使用详看接下来由 Waline 官方提供的例子。

假设你使用的头像服务不支持通过数字 QQ 邮箱获取头像,那么你可以通过以下方式增加此功能。

首先打开 Vercel 对应 Waline 项目的 Github 仓库,修改 index.js 文件,将以下内容添加合适位置:

/*
此方法或传入一个 comment 对象,你可以通过 comment.mail 获取邮箱。若返回值为 string 类型,则会直接调用返回值作为头像地址,否则正常生成 MD5。
*/
async avatarUrl(comment) {
const reg = new RegExp('(\\d+)@qq\\.com$', 'i');
const mail = comment.mail;
if (reg.test(mail)) {
const q = mail.replace(/@qq\.com/i, '').toLowerCase();
return 'https://q1.qlogo.cn/headimg_dl?dst_uin=' + q + '&spec=4';
}
},

自定义随机头像#

首先你要自己找你喜欢的头像作为头像库,然后,在文件夹的地址栏输入

Terminal window
$nr = 1; Get-ChildItem -File | Sort-Object { $_.BaseName -replace '\D+','' -as [int] } | ForEach-Object { Rename-Item $_.FullName -NewName ("$nr" + $_.Extension); $nr++ }

把图片变成数字序号排列,然后访问https://bulkresizephotos.com/zh

把图片都上传上去

  • 模式:选择“宽度”。
  • 宽度:输入 128(头像金标准)。
  • 格式:选择 WebP
  • 质量:设为 75

点击开始,下载后的压缩包里就是你需要的“极轻量”头像库了。单张图应该只有 3-5KB,加载速度起飞。


部署#

将图片推送到 GitHub#

  1. 在 GitHub 上新建一个公开仓库(Public Repository),名字可以叫 arknights-avatar
  2. 本地处理好 1.webp48.webp,并将文件夹重命名为img,然后全部上传到该仓库的根目录。
  3. 确认路径:确保你在浏览器访问 https://github.com/你的用户名/arknights-avatar/blob/main/1.webp 能看到图片。
  4. 在本地电脑新建一个文件夹(命名为api)。
  5. api 目录下新建文件 index.js,填入以下代码:
export default function handler(req, res) {
// 安全检查:拦截无 UA 的爬虫或恶意脚本
if (!req.headers['user-agent']) {
return res.status(403).send('Please use a browser to access.');
}
// 获取参数与配置信息
const { id } = req.query;
const total = 58;
const username = "用户名";
const repo = "仓库名";
// 确定种子:优先使用邮箱 HASH,无 HASH 则回退到访客 IP
let seed = id;
if (!seed) {
const forwarded = req.headers['x-forwarded-for'];
seed = forwarded ? forwarded.split(',')[0] : (req.socket.remoteAddress || "guest");
}
// 时间变量:按月刷新哈希结果
const date = new Date();
const timeVar = `${date.getFullYear()}-${date.getMonth() + 1}`;
const finalSeed = seed + timeVar;
// 核心算法:Java 风格的字符串哈希实现
let hash = 0;
for (let i = 0; i < finalSeed.length; i++) {
hash = ((hash << 5) - hash) + finalSeed.charCodeAt(i);
hash |= 0;
}
// 计算图片序号
const num = (Math.abs(hash) % total) + 1;
/**
* 图片分发策略
* 1. 仓库已设为 Private,直接使用 Vercel 本地路径。
* Vercel 会自动从连接的私有仓库中读取 /img 文件夹。
*/
const imageUrl = `/img/${num}.webp`;
/**
* 【备选:jsDelivr 加速方案】
* 如果以后仓库改回 Public,可以重新启用下方链接并注释掉上面的 imageUrl:
* const imageUrl = `https://fastly.jsdelivr.net/gh/${username}/${repo}@main/img/${num}.webp`;
*/
// 缓存控制:防止浏览器过度缓存重定向结果
res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
// 执行 302 重定向
return res.redirect(302, imageUrl);
}
  1. 将这个文件夹也上传到 GitHub

  2. 登录 Vercel

  3. 登录 Vercel 官网,点击 “Add New” -> “Project”

    在导入 Git 仓库列表里,找到你刚才创建的 avatar 仓库,点击 “Import”

    Project Name 随便起(比如 avatar-api),其他选项默认。

    点击 “Deploy”。这时候它会部署成功

  4. 部署完成后,你会得到一个 Vercel 域名(比如 avatar-api.vercel.app)。

这个域名/api

访问这个链接,如果能加载出图片,说明搭建成功

Waline 的服务端(比如 Vercel 的 Environment Variables)修改 GRAVATAR_STR

变量名: GRAVATAR_STR 变量值: https://你的API域名/api?id={{mail|md5}}

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Waline配置--评论区头像
https://lrwy.de5.net/posts/f60afe32/
作者
凛若无音
发布于
2026-01-31
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
凛若无音
像明天一样
告示
当天空暗到一定程度,你会看到星辰熠熠生辉。
分类
标签
数据统计
文章
35
分类
3
标签
17
共码字
124,920
存活时长
0
最终活动
0 天前

目录