目录会员体系中,用户如果不上传自界说头像,利用固定图片作为头像未免有些单调。PHP可以实现生成用户名首字母大概第一个汉字(第一个字符)的头像图片,倒霉用第三方API,第三方虽然图片比力多,但是会有超时。 计划思路[code]界说了一个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属性值。[/code]完备代码[code]//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) ]; } [/code]总结到此这篇关于PHP实现首字母(截取第一个汉字)生成头像图片的文章就先容到这了,更多相干PHP字母或汉字生成头像内容请搜索脚本之家以前的文章或继承欣赏下面的相干文章希望各人以后多多支持脚本之家! 来源:https://www.jb51.net/program/322728w7s.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 20:13 , Processed in 0.038202 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.