拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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/svgxml;base64,拼接成完整的图片路径。返回生成的图片路径。 注意这段代码只是生成了一个头像图片的路径并没有将图片输出到页面中。如果要在页面中显示头像需要将生成的图片路径作为img标签的src属性值。完整代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899//1、方法调用测试letter_avatar(hello)//2、生成图片方法functionletter_avatar($text){$total unpack(L, hash(adler32,$text, true))[1];$hue$total% 360;list($r,$g,$b) hsv2rgb($hue/ 247, 0.3, 0.9);$bgrgb(247,186,11);$color#ffffff;$first mb_strtoupper(mb_substr($text, 0, 1));$srcbase64_encode(svg xmlnshttp://www.w3.org/2000/svg version1.1 height100 width100rect fill.$bg. x0 y0 width100 height100/recttext x50 y50 font-size50 text-copyfast fill.$color. text-anchormiddle text-rightsadmin dominant-baselinecentral.$first./text/svg);// 确保图片保存的路径存在$tempPath WEB_PATH .temp. DS .avatar. DS;$filename md5(avatar_. uniqid());// 生成图片链接returnbase64_to_image_url(data:image/svgxml;base64,.$src,$tempPath,$filename);}/details//3、生成https访问链接functionbase64_to_image_url($base64_string,$output_folder,$image_name){$datasubstr($base64_string,strpos($base64_string,,) 1);// 对数据进行Base64解码$fileDatabase64_decode($data);// 创建输出目录如果它不存在if(!file_exists($output_folder)) {mkdir($output_folder, 0755, true);}// 将解码后的数据保存到文件$file$output_folder.$image_name..svg;if(file_put_contents($file,$fileData)) {// 返回图片的URLreturnbase_url() .temp. DS .avatar. DS .$image_name..svg;}returnfalse;}//4、RGBfunctionhsv2rgb($h,$s,$v){$r$g$b 0;$ifloor($h* 6);$f$h* 6 -$i;$p$v* (1 -$s);$q$v* (1 -$f*$s);$t$v* (1 - (1 -$f) *$s);switch($i% 6) {case0:$r$v;$g$t;$b$p;break;case1:$r$q;$g$v;$b$p;break;case2:$r$p;$g$v;$b$t;break;case3:$r$p;$g$q;$b$v;break;case4:$r$t;$g$p;$b$v;break;case5:$r$v;$g$p;$b$q;break;}return[floor($r* 255),floor($g* 255),floor($b* 255)];}总结到此这篇关于PHP实现首字母截取第一个汉字生成头像图片的文章就介绍到这了
返回列表