Gravatar(英语:Globally Recognized Avatar)是一项用于提供在全球范围内使用的头像服务。只要你在 Gravatar 的服务器上上传了你自己的头像,你便可以在其他任何支持 Gravatar 的博客、论坛等地方使用它。

一、更换 Gravatar 头像源

有时候 Gravatar 头像默认的源或者修改的源失效了,无法显示图像,因此需要更换 Gravatar 头像源。

下面是一些推荐的源:(点击地址可查看是否存活)

源名称 源地址/镜像文件夹
七牛 (推荐) https://dn-qiniu-avatar.qbox.me/avatar/
极客族 (推荐) https://sdn.geekzu.org/avatar/
和令奇(推荐) https://cdn.helingqi.com/avatar/
九月的风 https://cdn.sep.cc/avatar/
V2EX https://cdn.v2ex.com/gravatar/
Cravatar https://cravatar.cn/avatar/
Ihuan https://gravatar.ihuan.me/avatar/
loli https://gravatar.loli.net/avatar/
WeAvatar https://weavatar.com/avatar/

具体实现有2种办法:

方法一: 修改根目录下的 config.inc.php

    /** 更换头像源 */define('__TYPECHO_GRAVATAR_PREFIX__', 'http://dn-qiniu-avatar.qbox.me/avatar/');

方法二:修改文件 /var/Typecho/Common.php

找到 gravatarUrl()代码块,如下所示

/*** 获取gravatar头像地址** @param string|null $mail* @param int $size* @param string|null $rating* @param string|null $default* @param bool $isSecure** @return string*/
public static function gravatarUrl(?string $mail,int $size,?string $rating = null,?string $default = null,bool $isSecure = true
): string {if (defined('__TYPECHO_GRAVATAR_PREFIX__')) {$url = __TYPECHO_GRAVATAR_PREFIX__;} else {$url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';$url .= '/avatar/';}if (!empty($mail)) {$url .= md5(strtolower(trim($mail)));}$url .= '?s=' . $size;if (isset($rating)) {$url .= '&r=' . $rating;}if (isset($default)) {$url .= '&d=' . $default;}return $url;
}

修改头像源部分,将下面的

$url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';
$url .= '/avatar/';

替换成推荐的源地址及镜像文件夹,如:

$url = $isSecure ? 'https://cravatar.cn' : 'https://cdn.helingqi.com';  //镜像源
$url .= '/avatar/'; //(镜像源文件夹)

二、通过 QQ 邮箱,自动调用 QQ 头像

Gravatar 头像是需要注册的,如果我们没有注册,那只能使用他指定的默认头像,这就有点遗憾了,于是可以想想其他方法,比如 QQ 头像就有 API 接口可供调用。

1.有关接口

1) QQ 头像 API 接口

QQ 头像 API 接口地址示例1:http://q1.qlogo.cn/g?b=qq&nk=10000&s=100

QQ 头像 API 接口地址示例2 http://q2.qlogo.cn/headimg_dl?dst_uin=10000&spec=5

参数说明:

参数 描述
b qq(固定参数)
nk/dst_uin QQ号
s 头像尺寸(详情见下表)

头像大小说明:

s/spce 尺寸
1 40 × 40
2 40 × 40
3 100 × 100
4 140 × 140
5 640 × 640
40 40 × 40
100 100 × 100

2) QQ 昵称 API 接口(暂时用不上,写出来备查)

https://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=10000

这是QQ空间的一个Api接口(JSONP格式),该接口可以返回如下内容

portraitCallBack({"149740947":["http://qlogo4.store.qq.com/qzone/149740947/149740947/100",23,-1,0,0,0,"Hyer",0]})

其中的http://qlogo4.store.qq.com/qzone/149740947/149740947/100是 QQ 空间头像(无权访问),Hyer就是 QQ 昵称.

2. 修改文件 /var/Typecho/Common.php

typecho调用评论头像函数是 /var/typecho/Common.php 下面的 gravatarUrl() 函数,替换成下面的函数即可:

/*** 获取gravatar头像地址** @param string|null $mail* @param int $size* @param string|null $rating* @param string|null $default* @param bool $isSecure** @return string*/
public static function gravatarUrl(?string $mail,int $size,?string $rating = null,?string $default = null,bool $isSecure = false
): string {$reg = "/^\d{5,11}@[qQ][Qq]\.(com)$/";if (preg_match($reg, $mail)) {$img    = explode("@", $mail);$url = "//q2.qlogo.cn/headimg_dl?dst_uin={$img[0]}&spec={$size}";} else {if (defined('__TYPECHO_GRAVATAR_PREFIX__')) {$url = __TYPECHO_GRAVATAR_PREFIX__;} else {$url = $isSecure ? 'https://cravatar.cn' : 'https://cdn.helingqi.com';  //镜像源$url .= '/avatar/'; //(镜像源文件夹)}if (!empty($mail)) {$url .= md5(strtolower(trim($mail)));}$url .= '?s=' . $size;if (isset($rating)) {$url .= '&r=' . $rating;}if (isset($default)) {$url .= '&d=' . $default;}}return $url;
}

三、显示用户的头字母

如果既没有注册 Gravatar 头像,又没有留 QQ 邮箱,那又将使用他指定的默认头像了,于是又有人想出了使用用户头字母来作为图像的办法,并留下了 function ,我们只要对代码稍作修改即可。

1.修改主题文件夹下的 function.php 文件,在最后添加一个下面的两个函数

/*** 获取首字母头像* @param $text* @return string*/
function letter_avatar($text)
{$total = unpack('L', hash('adler32', $text, true))[1];$hue = $total % 360;list($r, $g, $b) = hsv2rgb($hue / 360, 0.3, 0.9);$bg = "rgb({$r},{$g},{$b})";$color = "#ffffff";$first = mb_strtoupper(mb_substr($text, 0, 1));$src = base64_encode('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="100" width="100"><rect fill="' . $bg . '" x="0" y="0" width="100" height="100"></rect><text x="50" y="75" font-size="70" text-copy="fast" fill="' . $color . '" text-anchor="middle" text-rights="admin" alignment-baseline="central">' . $first . '</text></svg>');return 'data:image/svg+xml;base64,' . $src;
}
function hsv2rgb($h, $s, $v)
{$r = $g = $b = 0;$i = floor($h * 6);$f = $h * 6 - $i;$p = $v * (1 - $s);$q = $v * (1 - $f * $s);$t = $v * (1 - (1 - $f) * $s);switch ($i % 6) {case 0:$r = $v;$g = $t;$b = $p;break;case 1:$r = $q;$g = $v;$b = $p;break;case 2:$r = $p;$g = $v;$b = $t;break;case 3:$r = $p;$g = $q;$b = $v;break;case 4:$r = $t;$g = $p;$b = $v;break;case 5:$r = $v;$g = $p;$b = $q;break;}return [floor($r * 255),floor($g * 255),floor($b * 255)];
}

调用该函数的语句就是 <?php echo letter_avatar('hollowman') ?>,但我们需要根据需要才调用对应的图像,那就还要又实现的思路。

2. 将原调用语句 <?php $comments->gravatar('40', ''); ?>修改成如下语句,并设置好样式

<!-- 如果没有注册gavatar图像,也没有qq邮箱,则显示首字母图像像 -->
<div class="avatar-bg" style="background-image:url(<?php echo letter_avatar($comments->author); ?> "><?php $comments->gravatar('40', 'blank'); ?>
</div>

样式代码

/* 默认avatar图像 */
.avatar {border-radius: 50%;display: block;margin: auto;
}/* 首字母图像背景 */
.avatar-bg {border-radius: 50%;display: block;margin: auto;background-size: cover;width: 40px;height: 40px;
}

分析:

    1. 增加了一个上级div,其大小设置为与avatar图像大小相同,并在该div中调用首字母图像作为背景;
    1. 修改了gravatar('40', '')函数,增加了一个 blank 参数。增加这个参数后,则在只有默认 avatar 头像的情况下,该图像会变为透明,从而让背景的图片显示出来。

typecho 调用 Gravatar 头像的几种思路相关推荐

  1. 解决 Typecho 的 Gravatar 头像显示问题

    使用 Cravatar 自动匹配机制解决 Gravatar 被墙和 QQ 邮箱用户显示问题 官方解释: 独有的三级头像匹配机制(当访客请求自己的头像时,我们会按此顺序分三级匹配头像:Cravatar- ...

  2. 稳定服务器头像,WordPress 修复 Gravatar 头像稳定服务器地址

    相信大家最近几天已经发现了,就是很多 WordPress 网站所使用的 Gravatar 头像出现不显示的情况,这里泪雪收集整理了一个方法解决一下这个问题,泪雪也已经及时修复并推送收费版本主题,免费版 ...

  3. Android 圆形头像的两种实现方式

    Android 圆形头像的两种实现方式 前言 这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的. 圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式: ...

  4. php gravatar,利用Laravel生成Gravatar头像地址的优雅方法

    前言 Gravatar头像已经成为了博客.论坛等一种非常流行的通用头像,不管是Wordpress还是Z-Blog.Typecho.Emlog等,留言或者登录注册等都支持Gravatar头像,Larav ...

  5. Wordpress开发 - 获取作者头像的两种方法

    写在前面 今天又被一个头像坑搞惨了,一般我们获取作者的信息是都需要在循环判断中才可以使用的!比如获取作者名称 <?php the_author(); ?> .如果没有在 <?php ...

  6. 关于图片轮播的几种思路

    图片轮播我们经常在众多网站中看到,各种轮播特效在有限的空间上展示了几倍于空间大小的内容,并且有着良好的视觉效果.很多初学js的小伙伴都会拿这个来练习.我也不例外,所以在此分享几个我写轮播图的过程,代码 ...

  7. 【JAVA】逢三退一的第二种思路(面向对象)

    提供第二种思路: 题目:500个小孩手拉手围成一圈,每个小孩有一编号,数数,当数到第三个时,将该小孩删除,求最后剩下的那个小孩是这500个小孩中的第几个. 面向对象编程,首先分析,有多少个对象? 两个 ...

  8. WordPress自定义gravatar头像,缓存Gravatar头像为网站提速

    WordPress评论是一个网站的灵魂,直接决定着网站的收录和权重,然而wordpress头像默认的是gravatar头像,访问网站时,读取速度非常慢,gravatar头像的服务器是国外的,这不光自己 ...

  9. 圆形头像的7种显示方法

    牙叔教程 简单易懂 效果展示 环境 手机: Mi 11 Pro Android版本: 11 Autojs版本: 9.0.11 图片形状: 正方形 圆形头像的7种显示方法 第1种: 使用Shapeabl ...

最新文章

  1. python十进制小数转二进制_python十进制和二进制的转换方法(含浮点数)
  2. leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数
  3. 内存问题排查手段及相关文件介绍
  4. php.ini $ phphome,shell 脚本安装PHP扩展的简单方法
  5. oracle服务器支持ipmi带外管理,ipmi带外管理
  6. thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送
  7. C++读写ini配置文件
  8. 2023考研高数思维导图
  9. R语言使用median函数计算dataframe数据中特定数据列的中位数、如果包含NA值则需要设置na.rm参数为TRUE
  10. 理财U15 累积投票与可赎债估值 习题解读
  11. 8.TypeScript入门之TS类型声明文件
  12. aardio部署_用aardio给python写个图形界面
  13. Mac下启动nacos
  14. 7-15 地下迷宫探索
  15. OpenBox:高效通用的黑盒优化系统
  16. 谁来教我渗透测试——黑客必须掌握的Linux基础
  17. python circle后面是什么意思_pythoncircle
  18. 亚马逊POA计划怎么写
  19. 多功能检测按键 单按 长按 多个按键 响应方式
  20. Oracle 10g在RHEL6上的另类安装方法

热门文章

  1. 家里的毛孩子,是我们人类最忠诚的伙伴。
  2. 蒟蒻信安笔记1:网络扫描与网络侦查
  3. matlab 信号 滤波,大仙带你学matlab信号处理和滤波去噪
  4. 大仙来了【20年复试上机真题】
  5. 三年老Android经验面经,最全Android知识总结
  6. 前端自动化测试框架Jest介绍和使用
  7. 2022年博客新星排行榜 日榜 2023-01-02 博客新星榜
  8. Linux(Centos7)服务器配置光网卡
  9. 错觉图片生成实验 - 动态的缪勒莱尔错觉
  10. 18、EL表达式、JSP标签、JSTL标签、自定义标签