会员系统中用户如果不上传自定义头像使用固定图片作为头像未免有些单调。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实现首字母截取第一个汉字生成头像图片的文章就介绍到这了
企业数字化 ERP 产品动态
相关推荐
Creo 2.0分解装配与动画实战指南:爆炸视图、运动链与AVI导出 简介:本资源是一份面向Creo 2.0初学者与机械设计工程师的实操型技术教程,聚焦产品装配体的可视化表达核心技能——分解装配创建与动画演示。内容系统覆盖分解状态的建立与管理、四种运动类型(平移/旋转/复制位置/切换分解位置)的应… · 2026/9/26 21:51:25
38.201-h00:5G NR物理层协议宪法与R17勘误精读指南 简介:本资源为3GPP Release 17标准核心规范TS 38.201 V17.0.0正式版文档(2021年12月发布),面向5G通信系统工程师、协议栈开发人员及高校无线通信方向研究者,用于深入理解NR物理层通用架构与设计原则。文档完整涵盖Laye… · 2026/9/26 21:51:25
Atlas 300V 24G推理卡YOLO部署实战:昇腾NPU环境搭建与调优 我手里这块卡,就是很多人问是不是“运算加速卡”的 Atlas 300V 24G。直接说结论:它是一张纯正的 AI 推理加速卡,干的是把训练好的模型“跑起来”的活,跟 GPU 那种既能训练又能渲染的通用加速卡不是一个路数。最近不少搞视觉检测的… · 2026/9/26 21:51:11
OpenHarmony上React Native列表性能优化:FlatList调参实战 做React Native开发这么久,凡是列表页面,几乎都会碰到同一个口头禅:用FlatList就行,它自带虚拟化。这句话在普通业务里没问题,可真到了OpenHarmony设备上——尤其是中低端平板和折叠屏——FlatList往往就成了卡顿重灾区… · 2026/9/26 23:38:03
AI Agent实战指南:从核心概念到工程落地全解析 这两年要是你在技术圈还没听说过 AI Agent,说实话有点说不过去了。我自己的经历是从去年初开始把 Agent 方向当正经营生来做的,最开始就是拿 LangChain 拼一个会调搜索的本地聊天机器人,后来一路做到帮团队落地企业内部的客服工单分诊、周报汇… · 2026/9/26 23:38:03
aarch64版Eclipse C++开发环境部署指南 简介:本资源为Eclipse IDE for C/C Developers 2021-12正式稳定版(R版),专为ARM64架构Linux系统(aarch64)设计,面向嵌入式开发、服务器端C/C编程及跨平台工具链构建的中高级开发者。该IDE深度集… · 2026/9/26 23:38:03
SQL Server+C#运动会成绩管理系统实战指南 简介:本资源是安徽工程大学数据库课程设计的典型实践项目——运动会成绩管理系统,面向高校计算机、软件工程等专业本科生,解决校级体育赛事中项目、运动员及成绩的数字化管理需求。系统基于C#开发,后端采用SQL Server数据库&#… · 2026/9/26 23:38:03
做网站运营好还是SEO好?3个维度教你怎么选 做网站运营好还是SEO好?3个维度教你怎么选 模板网站太丑,改不动,客户还嫌不够用。这是建站行业最真实的痛点。很多项目经理在交付前夜崩溃,因为设计稿和代码实现总是有差距。这时候, 做网站运营好还是SEO好… · 2026/9/26 23:37:56
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46