discuz 用户名首字/字母生成头像-Discuz教程下载

discuz 用户名首字/字母生成头像

开通本站Svip会员,全站资源免费下
多次编辑整理,写出完整版。目前仍在测试中,是否产生问题未知。
新加一些文件、修改2个系统文件(语言包source/language/lang_message.php,头像uc_server/avatar.php)。

借助的是php头像生成类Material-Design-Avatars-master
效果说明:(来自:建站笔记)
当用户注册后自动生成一个头像,当用户名为中文时取第一个中文字符,当用户名为英文时取第一个字母,生成随机背景色头像文件作为默认头像。(来自:建站笔记)

开始制作:
一、上传Material-Design-Avatars-master文件
亲爱的游客您好,请 登录 后进行 回复

将压缩包解压,make_avatar文件夹上传到网站根目录。
此时是可以单独测试的,地址:域名/make_avatar/avatar.php?Char=guest&uid=guest&size=48
访问后如果可以看到48px*48px大小的“用”字,且/make_avatar/avatars/目录里生成了guest-big.png、guest-middle.png、guest-small.png 三个图片则代表成功。
二、调用头像
1.打开uc_server/avatar.php,找到第36行,注释掉,在其下增加代码:
  1. //$avatar_url = 'images/noavatar_'.$size.'.gif';
  2.         $ex_avatar_url = '../make_avatar/avatars/'.$uid.'-'.$size.'.png';
  3.         if (is_readable($ex_avatar_url) == false) {
  4.                 $avatar_url = 'images/noavatar_'.$size.'.gif';
  5.         } else {
  6.                 $avatar_url = $ex_avatar_url;
  7.         }
复制代码

如果用户上传了头像,就用上传的头像。
如果用户未上传头像,就用我们生成的头像。
如果未上传也未生成,就用默认头像。
2.调用头像代码(来自:建站笔记)
系统代码,3种尺寸,48X48/120X120/200X200
  1. <img src="uc_server/avatar.php?uid=用户UID&size=small"/>
  2. <img src="uc_server/avatar.php?uid=用户UID&size=middle"/>
  3. <img src="uc_server/avatar.php?uid=用户UID&size=big"/>
复制代码
*生成头像的尺寸由make_avatar/avatar.php文件里设定的:
  1. $Avatar->Save("./avatars/$uid-big.png", 200);
  2. $Avatar->Save("./avatars/$uid-middle.png", 120);
  3. $Avatar->Save("./avatars/$uid-small.png", 48);
复制代码
每个人生成三个尺寸的头像。存储数量、目录、尺寸都可以修改。生成的图像命名和uc_server/avatar.php调用要匹配。
48、120、200是和Discuz默认头像尺寸相同的。
3.头像形状
  1. make_avatar/src/MDAvatars.php
  2. 圆形图片imagefilledellipse($this->Avatar,
  3.             $Width / 2,
  4.             $Height / 2,
  5.             $Width,
  6.             $Height,
  7.             $BackgroundColor
  8.         );
复制代码

方形图片
  1. imagefill($this->Avatar,
  2.             $Width / 2,
  3.             $Height / 2,
  4.             $BackgroundColor
  5.         );
复制代码

我用的是生成方形,用CSS改圆形。

三、新用户自动生成头像
打开source/language/lang_message.php,找到
第1025行,在=>右侧文字里加入头像<img>代码,示例:
  1. 'register_email_send_succeed' => '感谢您<img src="/make_avatar/avatar.php?Char={username}&uid={uid}" width="1px" height="1px"/>注册 {bbname},<br />系统给您发送了一封带有注册地址的邮件,快去登录邮箱获取注册链接进行下一步注册吧',
复制代码

还有第1034、1036、1038行,凡是提示注册成功的都加上。
//也可以在uc_server/avatar.php里做判断,如果未上传头像,使用<img src="/make_avatar/avatar.php?Char=用户名&uid=$uid&size=1"/>做头像,否则使用静态路径,但系统uc_server/avatar.php里没有用户名变量,还要查询获得。

注意avatars头像存储目录权限。

四、老用户生成头像
经过上面的修改,新注册用户会触发链接生成头像文件,老用户却没变,所以可以批量生成一次:
这个代码随便放哪个页面的模板,后台更新缓存,访问下这个页面即可为未上传头像的老用户生成头像。
  1. <!--{eval $unavatars=DB::fetch_all("SELECT * FROM ".DB::table('common_member')." WHERE `status`=0 and `avatarstatus`=0");}-->
  2. <!--{loop $unavatars $value}-->
  3. <img src="make_avatar/avatar.php?Char={$value[username]}&uid={$value[uid]}&size=32"/>
  4. <!--{/loop}-->
复制代码

需要特别注意,我用的是gbk编码,文件里面涉及编码转换,如果系统为其他编码,可能会导致头像中文字乱码,可以删除下编码转换代码试试。

20171121 补充:
注释掉MDAvatars.php第344行
//array(255, 255, 255),
以防止随机到白色背景,导致头像看着是空白的问题。

20180101 补充:
字体不全,有些汉字无法准确生成,看来中文用户名还是使用拼音首字母靠谱一些。

20190616修改
修复注册时生成头像太小的bug,去掉了触发时的size

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部