根据字符串首字母生成头像图片
// 1、方法调用测试 letter_avatar("sanyang"); // 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 = './test/uploads/'; $filename = md5('avatar_' . uniqid()); // 生成图片链接 $img_url = base64_to_image_url('data:image/svg+xml;base64,' . $src, $tempPath, $filename); echo $img_url; } // 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 './test/uploads/' . $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) ]; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析