JS实现文字头像生成的两种方案与代码示例

作者:窗边听雨时间:2026-10-23 16:21:31浏览:81

本文介绍使用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);
}

最终效果如图所示。需要注意的是,部分浏览器中文字可能无法水平居中,目前尚未找到通用的解决方案。

Canvas绘制文字头像基础 

补充知识点:前端开发小结——如何根据中文姓名自动生成头像。

需求与方案分析

1、需求分析

项目要求展示人员头像与名称列表。

Canvas绘制文字头像基础

头像由姓名的第一个文字与背景颜色组成,其中文字颜色固定为白色,背景颜色需要自动生成。

2、方案分析

由于名字图像是自动生成的,且背景颜色各异,可以考虑以下几种实现路径:

方案一:使用随机数自动生成一个16进制颜色字符串,作为头像的背景颜色。

方案二:获取名字的第一个字,将其转换成16进制文字颜色字符串,作为头像的背景颜色。

这里可能会有疑问,为什么不使用Base64转码为颜色值?经测试,通过Base64转码后的值包含大量F之后的字母,在转换为颜色时取值无效,具体表现见截图。

Canvas绘制文字头像基础

因此,排除使用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、结果展示

转换结果如下所示。

Canvas绘制文字头像基础

效果演示。

Canvas绘制文字头像基础

可以看到,当名字相同时,头像的背景颜色也保持一致,这比随机数生成的效果要好得多。

总结

至此,关于JS实现文字头像生成的代码介绍完毕。更多相关JS文字头像内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

作者最新文章