翼度科技»论坛 编程开发 PHP 查看内容

截取第一个字用php生成一个头像

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
在做商城时生成随机一个头像,找了一下发现用首个字符直接生成的类也不错,和用第三方外链的话还是有不同的,第三方虽然图片比较多,但是会有超时问题,所以用首字母生成方式本地搞,代码如下:
点击查看代码
  1. 1、方法调用测试
  2. letter_avatar("壹零柒")
  3. 2、生成图片方法
  4. function letter_avatar($text)
  5. {
  6.     $total = unpack('L', hash('adler32', $text, true))[1];
  7.     $hue = $total % 360;
  8.     list($r, $g, $b) = hsv2rgb($hue / 247, 0.3, 0.9);
  9.     $bg = "rgb(247,186,11)";
  10.     $color = "#ffffff";
  11.     $first = mb_strtoupper(mb_substr($text, 0, 1));
  12.     $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>');
  13.     // 确保图片保存的路径存在
  14.     $tempPath = WEB_PATH . 'temp' . DS . 'avatar' . DS;
  15.     $filename = md5('avatar_' . uniqid());
  16.     // 生成图片链接
  17.     return base64_to_image_url('data:image/svg+xml;base64,' . $src, $tempPath, $filename);
  18. }
  19. </details>
  20. 3、生成https访问链接
  21. function base64_to_image_url($base64_string, $output_folder, $image_name)
  22. {
  23.     $data = substr($base64_string, strpos($base64_string, ',') + 1);
  24.     // 对数据进行Base64解码
  25.     $fileData = base64_decode($data);
  26.     // 创建输出目录如果它不存在
  27.     if (!file_exists($output_folder)) {
  28.         mkdir($output_folder, 0755, true);
  29.     }
  30.     // 将解码后的数据保存到文件
  31.     $file = $output_folder . $image_name . '.svg';
  32.     if (file_put_contents($file, $fileData)) {
  33.         // 返回图片的URL
  34.         return base_url() . 'temp' . DS . 'avatar' . DS . $image_name. '.svg';
  35.     }
  36.     return false;
  37. }
  38. 4、RGB
  39. function hsv2rgb($h, $s, $v)
  40. {
  41.     $r = $g = $b = 0;
  42.     $i = floor($h * 6);
  43.     $f = $h * 6 - $i;
  44.     $p = $v * (1 - $s);
  45.     $q = $v * (1 - $f * $s);
  46.     $t = $v * (1 - (1 - $f) * $s);
  47.     switch ($i % 6) {
  48.         case 0:
  49.             $r = $v;
  50.             $g = $t;
  51.             $b = $p;
  52.             break;
  53.         case 1:
  54.             $r = $q;
  55.             $g = $v;
  56.             $b = $p;
  57.             break;
  58.         case 2:
  59.             $r = $p;
  60.             $g = $v;
  61.             $b = $t;
  62.             break;
  63.         case 3:
  64.             $r = $p;
  65.             $g = $q;
  66.             $b = $v;
  67.             break;
  68.         case 4:
  69.             $r = $t;
  70.             $g = $p;
  71.             $b = $v;
  72.             break;
  73.         case 5:
  74.             $r = $v;
  75.             $g = $p;
  76.             $b = $q;
  77.             break;
  78.     }
  79.     return [
  80.         floor($r * 255),
  81.         floor($g * 255),
  82.         floor($b * 255)
  83.     ];
  84. }
复制代码
来源:https://www.cnblogs.com/yilingqi/p/18207868
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具