首页 > 其他分享 >js:使用LetterAvatar通过canvas实现浏览器中生成字母头像

js:使用LetterAvatar通过canvas实现浏览器中生成字母头像

时间:2023-08-07 11:34:02浏览次数:37  
标签:function canvas name img js LetterAvatar size


实现效果

js:使用LetterAvatar通过canvas实现浏览器中生成字母头像_ecmascript

LetterAvatar的原理就是利用了浏览器对象canvas

在线体验:https://mouday.github.io/tools/pages/letter-avatar/index.html

LetterAvatar.js 完整代码

/*
 * LetterAvatar
 * 
 * Artur Heinze
 * Create Letter avatar based on Initials
 * based on https://gist.github.com/leecrossley/6027780
 */
(function(w, d){
    function LetterAvatar (name, size, color) {

        name  = name || '';
        size  = size || 60;

        var colours = [
                "#1abc9c", "#2ecc71", "#3498db", "#9b59b6", "#34495e", "#16a085", "#27ae60", "#2980b9", "#8e44ad", "#2c3e50", 
                "#f1c40f", "#e67e22", "#e74c3c", "#ecf0f1", "#95a5a6", "#f39c12", "#d35400", "#c0392b", "#bdc3c7", "#7f8c8d"
            ],

            nameSplit = String(name).split(' '),
            initials, charIndex, colourIndex, canvas, context, dataURI;


        if (nameSplit.length == 1) {
            initials = nameSplit[0] ? nameSplit[0].charAt(0):'?';
        } else {
            initials = nameSplit[0].charAt(0) + nameSplit[1].charAt(0);
        }

        if (w.devicePixelRatio) {
            size = (size * w.devicePixelRatio);
        }
            
        charIndex     = (initials == '?' ? 72 : initials.charCodeAt(0)) - 64;
        colourIndex   = charIndex % 20;
        canvas        = d.createElement('canvas');
        canvas.width  = size;
        canvas.height = size;
        context       = canvas.getContext("2d");
         
        context.fillStyle = color ? color : colours[colourIndex - 1];
        context.fillRect (0, 0, canvas.width, canvas.height);
        context.font = Math.round(canvas.width/2)+"px Arial";
        context.textAlign = "center";
        context.fillStyle = "#FFF";
        context.fillText(initials, size / 2, size / 1.5);

        dataURI = canvas.toDataURL();
        canvas  = null;

        return dataURI;
    }

    LetterAvatar.transform = function() {

        Array.prototype.forEach.call(d.querySelectorAll('img[avatar]'), function(img, name, color) {
            name = img.getAttribute('avatar');
            color = img.getAttribute('color');
            img.src = LetterAvatar(name, img.getAttribute('width'), color);
            img.removeAttribute('avatar');
            img.setAttribute('alt', name);
        });
    };


    // AMD support
    if (typeof define === 'function' && define.amd) {
        
        define(function () { return LetterAvatar; });
    
    // CommonJS and Node.js module support.
    } else if (typeof exports !== 'undefined') {
        
        // Support Node.js specific `module.exports` (which can be a function)
        if (typeof module != 'undefined' && module.exports) {
            exports = module.exports = LetterAvatar;
        }

        // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function)
        exports.LetterAvatar = LetterAvatar;

    } else {
        
        window.LetterAvatar = LetterAvatar;

        d.addEventListener('DOMContentLoaded', function(event) {
            LetterAvatar.transform();
        });
    }
})(window, document);

可以在浏览器中直接使用

<img width="256" height="256" avatar="Dao Lam" color="#0D8ABC">

参考文章

  1. https://mkblog.cn/blog/demo/LetterAvatar/
  2. https://github.com/daolavi/LetterAvatar/


标签:function,canvas,name,img,js,LetterAvatar,size
From: https://blog.51cto.com/mouday/6991965

相关文章

  • Nodejs安装教程
    1.下载地址下载地址:https://nodejs.org/zh-cn/download/,根据自己需求选择下载  2.安装1.双击安装包,一直点击【下一步】2.点击change按钮,更换到自己的指定安装位置,点击【下一步】3.一直点击【下一步】,最后安装成功即可3.配置环境变量Node.js安装完成后,我们需要设置环境......
  • 基于NodeJS游戏交流社区系统的设计与实现
    随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。游戏交流社区系统,主要的模块包括查看首页、个人中心、用户管理、游戏类型管理、游戏信息管理、游戏攻略管理、交流论坛、系统管理等功能。系统中管理员主要是为了安全有......
  • node js 目录操作
    一、创建目录1、语法以下为创建目录的语法格式:fs.mkdir(path[,options],callback)2、参数参数使用说明如下:path -文件路径。options参数可以是:recursive -是否以递归的方式创建目录,默认为false。mode -设置目录权限,默认为0777。callback -回调函......
  • Nodejs 第四章(Npm install 原理)
    在执行npminstall的时候发生了什么?首先安装的依赖都会存放在根目录的node_modules,默认采用扁平化的方式安装,并且排序规则.bin第一个然后@系列,再然后按照首字母排序abcd等,并且使用的算法是广度优先遍历,在遍历依赖树时,npm会首先处理项目根目录下的依赖,然后逐层处理每个依赖包的依......
  • Nodejs 第五章(Npm run 原理)
    npmrunxxx发生了什么按照下面的例子npmrundev举例过程中发生了什么读取packagejson的scripts对应的脚本命令(dev:vite),vite是个可执行脚本,他的查找规则是:先从当前项目的node_modules/.bin去查找可执行命令vite如果没找到就去全局的node_modules去找可执行命令vite如果还......
  • Nodejs 第六章(npx)
    npx是什么npx是一个命令行工具,它是npm5.2.0版本中新增的功能。它允许用户在不安装全局包的情况下,运行已安装在本地项目中的包或者远程仓库中的包。npx的作用是在命令行中运行node包中的可执行文件,而不需要全局安装这些包。这可以使开发人员更轻松地管理包的依赖关系,并且可以避免全......
  • Nodejs 第七章(发布npm包)
    发布npm的包的好处是什么方便团队或者跨团队共享代码,使用npm包就可以方便的管理,并且还可以进行版本控制做开源造轮子必备技术,否则你做完的轮子如何让别人使用难道是U盘拷贝?面试题我面字节的时候就问到了这个增加个人IP让更多的人知道你的技术能力和贡献发布前准备工作npmadduser......
  • 如何构建一个 NodeJS 影院微服务并使用 Docker 部署
    前言如何构建一个NodeJS影院微服务并使用Docker部署。在这个系列中,将构建一个NodeJS微服务,并使用DockerSwarm集群进行部署。以下是将要使用的工具:NodeJS版本7.2.0MongoDB3.4.1DockerforMac1.12.6在尝试本指南之前,应该具备:NodeJS的基本知识Docker的基本知识(并且已经......
  • web杂记(5)-js(1)
    目录undefinednullundefinedletx;undefinedtypeofx"undefined"lety=111;typeofy"number"typeofyy"undefined"nullletx=55;x;55lety=null;y;x+y;55x*y;0if(!y)console.log("false");falseif(y)cons......
  • 【补充】使用idea打开可运行没问题的js文件,多处红色波浪线警告
    【补充】使用idea打开可运行没问题的js文件,多处红色波浪线警告【一】问题说明问题主要发现于在pycharm中打开Vue项目发现所有JS文件代码底下都是红色波浪线当我们将鼠标悬停在红色波浪线的代码上时,他会提示JSHint:'export'isonlyavailableinES6(use'esversion:6'......