PHP实现首字母(截取第一个汉字)生成头像图片
发布:smiling 来源: PHP粉丝网 添加日期:2024-09-29 19:09:44 浏览: 评论:0
会员系统中,用户如果不上传自定义头像,使用固定图片作为头像未免有些单调。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)
- ];
- }
Tags: PHP实现首字母生成头像图片
- 上一篇:PHP使用OCR技术识别图片中的文字(无需接口)
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)