JS实现文字头像生成的两种方案与代码示例
本文介绍使用JavaScript和Canvas生成文字头像的两种实现方式。第一种通过随机数生成背景色,第二种将姓名首字转换为十六进制颜色值以确保同名同色。文章对比了两种方法的优劣,提供了核心代码片段,并指出Base64转码在颜色生成中的局限性。
Canvas绘制文字头像基础
利用Canvas绘制文字即可实现头像生成。
function gen_text_img(size, s) {
let colors = [
"rgb(239,150,26)", 'rgb(255,58,201)', "rgb(111,75,255)", "rgb(36,174,34)", "rgb(80,80,80)"
];
let cvs = document.createElement("canvas");
cvs.setAttribute('width', size[0]);
cvs.setAttribute('height', size[1]);
let ctx = cvs.getContext("2d");
ctx.fillStyle = colors[Math.floor(Math.random()*(colors.length))];
ctx.fillRect(0, 0, size[0], size[1]);
ctx.fillStyle = 'rgb(255,255,255)';
ctx.font = size[0]*0.6+"px Arial";
ctx.textBaseline = "middle";
ctx.textAlign = "center";
ctx.fillText(s,size[0]/2,size[1]/2);
return cvs.toDataURL('image/jpeg', 1);
}
最终效果如图所示。需要注意的是,部分浏览器中文字可能无法水平居中,目前尚未找到通用的解决方案。
补充知识点:前端开发小结——如何根据中文姓名自动生成头像。
需求与方案分析
1、需求分析
项目要求展示人员头像与名称列表。

头像由姓名的第一个文字与背景颜色组成,其中文字颜色固定为白色,背景颜色需要自动生成。
2、方案分析
由于名字图像是自动生成的,且背景颜色各异,可以考虑以下几种实现路径:
方案一:使用随机数自动生成一个16进制颜色字符串,作为头像的背景颜色。
方案二:获取名字的第一个字,将其转换成16进制文字颜色字符串,作为头像的背景颜色。
这里可能会有疑问,为什么不使用Base64转码为颜色值?经测试,通过Base64转码后的值包含大量F之后的字母,在转换为颜色时取值无效,具体表现见截图。

因此,排除使用Base64转码的方法。
第一种方法虽然简单,但结果不可控(同一个名字的头像背景颜色可能不一致)。因此,我们采用第二种方式。
文字转颜色代码实现
3、代码实现
// 获取名字第一个文字,转换成16进制颜色值
const { name } = this.props;
let firstName = name.substring(1, 0);
tranColor = (name) => {
var str ='';
for(var i=0; i<name.length; i++) {
str += parseInt(name[i].charCodeAt(0), 10).toString(16);
}
return '#' + str.slice(1, 4);
}
const bgColor = this.tranColor(name)
这样可以生成一个合法的16进制颜色字符串。如果需要配置不同的透明度,可以多取一位 str.slice(1, 5)。由于这里转换为16进制,所以只取前3位(对应索引1到4)。
生成结果与总结
4、结果展示
转换结果如下所示。

效果演示。

可以看到,当名字相同时,头像的背景颜色也保持一致,这比随机数生成的效果要好得多。
总结
至此,关于JS实现文字头像生成的代码介绍完毕。更多相关JS文字头像内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
anime.js 快速入门:怎么引入库并编写第一个 DOM 动画
2026-11-05 14:22:43
在线JS解密后变量名仍乱码?结合浏览器DevTools调试还原
2026-11-04 20:26:01
怎么在浏览器中运行JavaScript代码并查看输出结果
2026-11-04 09:07:33
JS 获取屏幕分辨率:window.screen.width 与 height 用法
2026-11-04 08:52:48
为什么推荐用DOMContentLoaded代替window.onload初始化JS
2026-11-04 08:42:33
