PHP实现首字母(截取第一个汉字)生成头像图片

 更新时间:2024年06月15日 12:01:02   作者:壹零柒  
会员系统中,用户如果不上传自定义头像,使用固定图片作为头像未免有些单调,PHP可以实现生成用户名首字母或者第一个汉字(第一个字符)的头像图片,不使用第三方API,第三方虽然图片比较多,但是会有超时

会员系统中,用户如果不上传自定义头像,使用固定图片作为头像未免有些单调。PHP可以实现生成用户名首字母或者第一个汉字(第一个字符)的头像图片,不使用第三方API,第三方虽然图片比较多,但是会有超时。

设计思路

定义了一个letter_avatar函数,接收一个参数$text,表示要生成头像的文字。
使用hash函数计算出$text的哈希值,并将其解包为一个无符号长整型数。
将哈希值对360取余得到一个色相值$hue。
使用hsv2rgb函数将色相、饱和度和亮度转换为RGB分量值。
根据RGB值生成背景颜色$bg。
设定文字颜色$color为白色。
使用mb_strtoupper函数将$text的首字母转为大写。
使用SVG语法生成一个正方形的背景和一个居中的文字。
使用base64_encode函数将SVG代码转为Base64编码。
将Base64编码和前缀data:image/svg+xml;base64,拼接成完整的图片路径。
返回生成的图片路径。 注意:这段代码只是生成了一个头像图片的路径,并没有将图片输出到页面中。如果要在页面中显示头像,需要将生成的图片路径作为<img>标签的src属性值。

完整代码

//1、方法调用测试
letter_avatar("hello")

//2、生成图片方法
function letter_avatar($text)
{
    $total = unpack('L', hash('adler32', $text, true))[1];
    $hue = $total % 360;
    list($r, $g, $b) = hsv2rgb($hue / 247, 0.3, 0.9);

    $bg = "rgb(247,186,11)";

    $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="50" font-size="50" text-copy="fast" fill="' . $color . '" text-anchor="middle" text-rights="admin" dominant-baseline="central">' . $first . '</text></svg>');

    // 确保图片保存的路径存在
    $tempPath = WEB_PATH . 'temp' . DS . 'avatar' . DS;
    $filename = md5('avatar_' . uniqid());

    // 生成图片链接
    return base64_to_image_url('data:image/svg+xml;base64,' . $src, $tempPath, $filename);
}
</details>

//3、生成https访问链接
function base64_to_image_url($base64_string, $output_folder, $image_name)
{
    $data = substr($base64_string, strpos($base64_string, ',') + 1);

    // 对数据进行Base64解码
    $fileData = base64_decode($data);

    // 创建输出目录如果它不存在
    if (!file_exists($output_folder)) {
        mkdir($output_folder, 0755, true);
    }

    // 将解码后的数据保存到文件
    $file = $output_folder . $image_name . '.svg';

    if (file_put_contents($file, $fileData)) {
        // 返回图片的URL
        return base_url() . 'temp' . DS . 'avatar' . DS . $image_name. '.svg';
    }
    return false;
}

//4、RGB
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实现首字母(截取第一个汉字)生成头像图片的文章就介绍到这了,更多相关PHP字母或汉字生成头像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • CodeIgniter中实现泛域名解析

    CodeIgniter中实现泛域名解析

    这篇文章主要介绍了CodeIgniter中实现泛域名解析的方法,需要的朋友可以参考下
    2014-07-07
  • YII框架行为behaviors用法示例

    YII框架行为behaviors用法示例

    这篇文章主要介绍了YII框架行为behaviors用法,结合实例形式分析了Yii框架行为behaviors的添加与使用简单操作技巧,需要的朋友可以参考下
    2019-04-04
  • PHP实现一个二维码同时支持支付宝和微信支付的示例

    PHP实现一个二维码同时支持支付宝和微信支付的示例

    这篇文章主要介绍了PHP实现一个二维码同时支持支付宝和微信支付的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • PHP中使用CURL模拟登录并获取数据实例

    PHP中使用CURL模拟登录并获取数据实例

    这篇文章主要介绍了PHP中使用CURL模拟登录并获取数据实例,登录成功后获取个人头像并输出显示,需要的朋友可以参考下
    2014-07-07
  • php中curl新手秒变高手的使用教程实例

    php中curl新手秒变高手的使用教程实例

    本文介绍PHP中使用cURL发送HTTP请求的优势,涵盖POST数据提交、文件上传下载、http验证、代理请求、JSON处理及多连接处理,强调其灵活性和强大功能,适合复杂网络操作需求
    2025-06-06
  • PHP Streams(流)详细介绍及使用

    PHP Streams(流)详细介绍及使用

    这篇文章主要介绍了PHP Streams(流)详细介绍及使用,PHP Streams是内置核心操作,可能一般的开发者很少用,它用于统一文件、网络、数据压缩等类文件操作方式,并为这些类文件操作提供一组通用的函数接口,需要的朋友可以参考下
    2015-05-05
  • PHP实现获取FLV文件的时间

    PHP实现获取FLV文件的时间

    这篇文章主要介绍了PHP实现获取FLV文件的时间,本文直接给出实现代码和使用方法,需要的朋友可以参考下
    2015-02-02
  • php composer的自动加载原理深入解析

    php composer的自动加载原理深入解析

    这篇文章主要为大家介绍了php composer自动加载原理深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • thinkphp实现分页显示功能

    thinkphp实现分页显示功能

    这篇文章主要为大家详细介绍了thinkphp实现分页显示功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • php多种形式发送邮件(mail qmail邮件系统 phpmailer类)

    php多种形式发送邮件(mail qmail邮件系统 phpmailer类)

    这篇文章主要介绍了php多种形式发送邮件的方法,包括使用mail()函数、使用管道的形式、使用phpmailer类等方法,大家参考使用吧
    2014-01-01

最新评论