WordPress之用字母替代图片脚本:LetterAvatar

冬涛同学_9705

冬涛同学_9705

2020-04-21

3193人浏览

转载

下面由wordpress技巧栏目给大家介绍关于用字母替代图片脚本:letteravatar,希望对需要的朋友有所帮助!

基于canvas,通过toDataURL动态生成base64图片。目前我主题的Gravatar头像,就是利用这个LetterAvatar脚本实现未设置Gravatar头像则读取ALT标签,自动生成首字图片替代默认的头像图片。

c7a7e40f3e27a74e2c9db0b8d99afe3.png

之前已有WP爱好者制作了一款:mk-letter-avatar 字母头像插件,试了一下很好用,不过打开浏览器开者工具发现产生大量404错误,看了一下源代码,该插件是通过无头像返回404错误,触发onerror事件用自动生成的字母图片替换src图片地址,判断方式不是很合理,如果不是因为个缺点我都想直接拿来用了,如果作者再优化一下,绝对是款优秀实用的插件。

我的实现原理和插件不同,配合头像本地缓存功能,判断无头像后,直接为无头像的图片添加特定的class类,然后通过LetterAvatar脚本替换图片。

需要注意的是上面提到的插件,Gravatar头像图片必须有alt标签属性,否则不会生成正常的图片,可惜大部分主题默认Gravatar头像alt标签属性是空的.....

如果想自动为Gravatar头像添加alt标签属性,可以将下面的代码添加到当前主题函数模板functions.php中:

Wordpress OAuth
Wordpress OAuth

启动并完成 WordPress.com OAuth 认证,通过 REST API 发布文章。适用于需要生成授权链接、交换授权码等场景。

下载
function zm_gravatar_alt($altgravatar) {
if (have_comments()) {
$alt = get_comment_author();
}
else {
$alt = get_the_author_meta('display_name');
}
$altgravatar= str_replace('alt=\'\'', 'alt=\'' . $alt . '\' title=\'Gravatar for ' . $alt . '\'', $altgravatar);
return $altgravatar;
}
add_filter('get_avatar', 'zm_gravatar_alt');

之后,自动将评论者昵称做为alt属性。

本文只是自己做个记录,并不是教大家怎么弄这个头像,如果认为这字母头像还不错,请直接使用上面介绍的插件。

另附LetterAvatar脚本演示代码:

html>

<h1>Letter Avatar</h1>
 
<small><strong>用法:</strong></small>
<pre class="brush:php;toolbar:false;">
<code>@@##@@</code>
    <script></script><script> /* *&nbsp;LetterAvatar *&nbsp; *&nbsp;Artur&nbsp;Heinze *&nbsp;Create&nbsp;Letter&nbsp;avatar&nbsp;based&nbsp;on&nbsp;Initials *&nbsp;based&nbsp;on&nbsp;https://gist.github.com/leecrossley/6027780 */ (function(w,&nbsp;d){ function&nbsp;LetterAvatar&nbsp;(name,&nbsp;size,&nbsp;color)&nbsp;{ &nbsp; name&nbsp;&nbsp;=&nbsp;name&nbsp;||&nbsp;''; size&nbsp;&nbsp;=&nbsp;size&nbsp;||&nbsp;60; &nbsp; var&nbsp;colours&nbsp;=&nbsp;[ "#1abc9c",&nbsp;"#2ecc71",&nbsp;"#3498db",&nbsp;"#9b59b6",&nbsp;"#34495e",&nbsp;"#16a085",&nbsp;"#27ae60",&nbsp;"#2980b9",&nbsp;"#8e44ad",&nbsp;"#2c3e50",&nbsp; "#f1c40f",&nbsp;"#e67e22",&nbsp;"#e74c3c",&nbsp;"#ecf0f1",&nbsp;"#95a5a6",&nbsp;"#f39c12",&nbsp;"#d35400",&nbsp;"#c0392b",&nbsp;"#bdc3c7",&nbsp;"#7f8c8d" ], &nbsp; nameSplit&nbsp;=&nbsp;String(name).split('&nbsp;'), initials,&nbsp;charIndex,&nbsp;colourIndex,&nbsp;canvas,&nbsp;context,&nbsp;dataURI; &nbsp; &nbsp; if&nbsp;(nameSplit.length&nbsp;==&nbsp;1)&nbsp;{ initials&nbsp;=&nbsp;nameSplit[0]&nbsp;?&nbsp;nameSplit[0].charAt(0):'?'; }&nbsp;else&nbsp;{ initials&nbsp;=&nbsp;nameSplit[0].charAt(0)&nbsp;+&nbsp;nameSplit[1].charAt(0); } &nbsp; if&nbsp;(w.devicePixelRatio)&nbsp;{ size&nbsp;=&nbsp;(size&nbsp;*&nbsp;w.devicePixelRatio); } charIndex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(initials&nbsp;==&nbsp;'?'&nbsp;?&nbsp;72&nbsp;:&nbsp;initials.charCodeAt(0))&nbsp;-&nbsp;64; colourIndex&nbsp;&nbsp;&nbsp;=&nbsp;charIndex&nbsp;%&nbsp;20; canvas&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;d.createElement('canvas'); canvas.width&nbsp;&nbsp;=&nbsp;size; canvas.height&nbsp;=&nbsp;size; context&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;canvas.getContext("2d"); &nbsp; context.fillStyle&nbsp;=&nbsp;color&nbsp;?&nbsp;color&nbsp;:&nbsp;colours[colourIndex&nbsp;-&nbsp;1]; context.fillRect&nbsp;(0,&nbsp;0,&nbsp;canvas.width,&nbsp;canvas.height); context.font&nbsp;=&nbsp;Math.round(canvas.width/2)+"px&nbsp;Arial"; context.textAlign&nbsp;=&nbsp;"center"; context.fillStyle&nbsp;=&nbsp;"#FFF"; context.fillText(initials,&nbsp;size&nbsp;/&nbsp;2,&nbsp;size&nbsp;/&nbsp;1.5); &nbsp; dataURI&nbsp;=&nbsp;canvas.toDataURL(); canvas&nbsp;&nbsp;=&nbsp;null; &nbsp; return&nbsp;dataURI; } &nbsp; LetterAvatar.transform&nbsp;=&nbsp;function()&nbsp;{ &nbsp; Array.prototype.forEach.call(d.querySelectorAll('img[alt]'),&nbsp;function(img,&nbsp;name,&nbsp;color)&nbsp;{ name&nbsp;=&nbsp;img.getAttribute('alt'); color&nbsp;=&nbsp;img.getAttribute('color'); img.src&nbsp;=&nbsp;LetterAvatar(name,&nbsp;img.getAttribute('width'),&nbsp;color); img.removeAttribute('avatar'); img.setAttribute('alt',&nbsp;name); }); }; &nbsp; &nbsp; //&nbsp;AMD&nbsp;support if&nbsp;(typeof&nbsp;define&nbsp;===&nbsp;'function'&nbsp;&&&nbsp;define.amd)&nbsp;{ define(function&nbsp;()&nbsp;{&nbsp;return&nbsp;LetterAvatar;&nbsp;}); //&nbsp;CommonJS&nbsp;and&nbsp;Node.js&nbsp;module&nbsp;support. }&nbsp;else&nbsp;if&nbsp;(typeof&nbsp;exports&nbsp;!==&nbsp;'undefined')&nbsp;{ //&nbsp;Support&nbsp;Node.js&nbsp;specific&nbsp;`module.exports`&nbsp;(which&nbsp;can&nbsp;be&nbsp;a&nbsp;function) if&nbsp;(typeof&nbsp;module&nbsp;!=&nbsp;'undefined'&nbsp;&&&nbsp;module.exports)&nbsp;{ exports&nbsp;=&nbsp;module.exports&nbsp;=&nbsp;LetterAvatar; } &nbsp; //&nbsp;But&nbsp;always&nbsp;support&nbsp;CommonJS&nbsp;module&nbsp;1.1.1&nbsp;spec&nbsp;(`exports`&nbsp;cannot&nbsp;be&nbsp;a&nbsp;function) exports.LetterAvatar&nbsp;=&nbsp;LetterAvatar; &nbsp; }&nbsp;else&nbsp;{ window.LetterAvatar&nbsp;=&nbsp;LetterAvatar; &nbsp; d.addEventListener('DOMContentLoaded',&nbsp;function(event)&nbsp;{ LetterAvatar.transform(); }); } })(window,&nbsp;document); </script>

原项目地址:https://github.com/daolavi/LetterAvatar

推荐教程:《WordPress》

相关文章

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

相关标签:

wordpress

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

2024.01.03

4356

7

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

2025.12.06

306

9

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

4611

6

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

284

21

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

2026.01.21

8745

27

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

2026.04.02

938

19

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5510

6

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

2023.09.18

6415

6

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.15

6499

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何在 Windows 11 上安装 XAMPP
如何在 Windows 11 上安装 XAMPP

共1课时 | 233人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 12万人学习