PHP实现首字母(截取第一个汉字)生成头像图片
会员系统中,用户如果不上传自定义头像,使用固定图片作为头像未免有些单调。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,拼接成完整的图片路径。
返回生成的图片路径。 注意:这段代码只是生成了一个头像图片的路径,并没有将图片输出到页面中。如果要在页面中显示头像,需要将生成的图片路径作为标签的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('');
// 确保图片保存的路径存在
$tempPath = WEB_PATH . 'temp' . DS . 'avatar' . DS;
$filename = md5('avatar_' . uniqid());
// 生成图片链接
return base64_to_image_url('data:image/svg+xml;base64,' . $src, $tempPath, $filename);
}
//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字母或汉字生成头像内容请搜索科站长以前的文章或继续浏览下面的相关文章希望大家以后多多支持科站长!
您可能感兴趣的文章
- 05-12php编程基础期末考试重点是什么,php编程基础
- 05-12PHP是前端还是后端语言?PHP前端编程语言常被误解为纯后端
- 05-12{php 5 高级编程}怎么样,php5高级编程教程
- 05-12php编程windows环境怎么配置?PHP Windows环境配置教程
- 05-12php编程无限保存,php如何实现无限级数据保存
- 05-12php编程宝典dvd哪里下载,php编程宝典
- 05-12php编程能力提升难吗,php编程能力提升
- 05-12php需要怎么编程,php编程入门教程
- 05-12如何高效学习PHP编程?PHP实战技巧有哪些
- 05-12php编程的软件有哪些,php编程软件推荐
阅读排行
推荐教程
- 07-25PHP建立MySQL与MySQLi持久化连接(长连接)区别
- 07-25PHP WindSearch实现站内搜索功能
- 07-25PHP调用FFmpeg实现视频切片
- 02-01PHP编程用什么软件?资深开发者为你揭秘最佳工具组合
- 01-23重庆哪里能找到专业的PHP编程培训班?推荐哪家比较好?
- 01-23如何通过PHP编程实现从文本框输入并处理整数的完整代码示例?
- 02-22PHP编程架构原理,如何深入理解其应用与实际开发中的应用场景?
- 01-28php编程第3版pdf中,有哪些新特性或更新让我不得不重新学习?
- 01-21PHP编程如何巧妙实现九九乘法表?分享编程技巧与代码细节!
- 11-23PHP 7安装使用体验之性能大提升,兼容性强,扩展支
