第 1 位会员
日志
粉丝
关注
好友:5922
访客:33479
日志归档
    相册
    目录

    【Discuz教程】 Discuz设置用户名首字/字母生成头像

    Discuz / 21/3/29 17:03 / 451 / 2

    Discuz设置用户名首字/字母生成头像

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

    开始制作:

    一、上传Material-Design-Avatars-master文件

    下载make_avatar 密码:hw9j
    将压缩包解压,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行,注释掉,在其下增加代码:

    // $avatar_url = 'images/noavatar_' . $size . '.gif' ;
            $ex_avatar_url = '../make_avatar/avatars/' .$uid. '-' .$size. '.png' ;
            if (is_readable($ex_avatar_url) == false ) {
                    $avatar_url = 'images/noavatar_' .$size. '.gif' ;
            } else {
                    $avatar_url = $ex_avatar_url;
            }

    如果用户上传了头像,就用上传的头像。
    如果用户未上传头像,就用我们生成的头像。
    如果未上传也未生成,就用默认头像。
    2.调用头像代码
    系统代码,3种尺寸,48X48/120X120/200X200

    < img src = "uc_server/avatar.php?uid=用户UID&size=small" />
    < img src = "uc_server/avatar.php?uid=用户UID&size=middle" />
    < img src = "uc_server/avatar.php?uid=用户UID&size=big" />

    *生成头像的尺寸由make_avatar/avatar.php文件里设定的:

    $Avatar->Save( "./avatars/$uid-big.png" , 200 );
    $Avatar->Save( "./avatars/$uid-middle.png" , 120 );
    $Avatar->Save( "./avatars/$uid-small.png" , 48 );

    每个人生成三个尺寸的头像。存储数量、目录、尺寸都可以修改。生成的图像命名和uc_server/avatar.php调用要匹配。
    48、120、200是和discuz默认头像尺寸相同的。

    3.头像形状
    make_avatar/src/MDAvatars.php
    圆形图片

    imagefilledellipse( $this ->Avatar,
                $Width / 2 ,
                $Height / 2 ,
                $Width,
                $Height,
                $BackgroundColor
            );

    方形图片

    imagefill( $this ->Avatar,
                $Width / 2 ,
                $Height / 2 ,
                $BackgroundColor
            );

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

    三、新用户自动生成头像

    打开source/language/lang_message.php,找到
    第1025行,在=>右侧文字里加入头像<img>代码,示例:

    '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头像存储目录权限。

    四、老用户生成头像

    经过上面的修改,新注册用户会触发链接生成头像文件,老用户却没变,所以可以批量生成一次:
    这个代码随便放哪个页面的模板,后台更新缓存,访问下这个页面即可为未上传头像的老用户生成头像。

    <!--{eval $unavatars=DB::fetch_all("SELECT * FROM ".DB::table('common_member')." WHERE `status`=0 and `avatarstatus`=0");}-->
    <!--{loop $unavatars $value}-->
    <img src= "make_avatar/avatar.php?Char={ $value [username]}&uid={ $value [uid]}&size=32" />
    <!--{/loop}-->

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

    20171121补充:
    注释掉MDAvatars.php第344行

    //array(255, 255, 255),

    以防止随机到白色背景,导致头像看着是空白的问题。

    其实有个更简单的代码取代uc_server/avatar.php的

    <!--{avatar($_G[uid],small)}-->
    

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

    20190616修改

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

    2
    评论 (2)
    admin
    21/4/17 12:54
    待更新!!
    admin
    21/4/17 13:05
    Discuz用户名设置成首字/字母生成头像
    请勿发布不友善或者负能量的內容。与人为善,比聪明更重要!
    您需要登录后才可以评论 登录 | 注册