mirror of https://github.com/helloxz/onenav.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.3 KiB
101 lines
2.3 KiB
<?php |
|
|
|
/** |
|
* 首字母头像 |
|
* @param $text |
|
* @return string |
|
* 原作者:http://t.zoukankan.com/ccw869476711-p-13596791.html |
|
*/ |
|
function letter_avatar($text) |
|
{ |
|
$total = unpack('L', hash('adler32', $text, true))[1]; |
|
$hue = $total % 360; |
|
list($r, $g, $b) = hsv2rgb($hue / 360, 0.3, 0.9); |
|
|
|
$bg = "rgb({$r},{$g},{$b})"; |
|
$color = "#ffffff"; |
|
$first = mb_strtoupper(mb_substr($text, 0, 1)); |
|
$src = '<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" alignment-baseline="central">' . $first . '</text></svg>'; |
|
//$value = 'data:image/svg+xml;base64,' . $src; |
|
$value = $src; |
|
return $value; |
|
} |
|
|
|
|
|
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) |
|
]; |
|
} |
|
|
|
/** |
|
* 输出svg图像 |
|
*/ |
|
function output_ico() { |
|
//获取文字 |
|
$text = @trim($_GET['text']); |
|
$text = empty($text) ? '空' : $text; |
|
|
|
//获取当前主机名 |
|
$host = $_SERVER['HTTP_HOST']; |
|
//获取reffrer |
|
$referer = $_SERVER['HTTP_REFERER']; |
|
|
|
//如果referer和主机名不匹配,则禁止调用 |
|
if ( ( !empty($referer) ) && ( !strstr($referer,$host) ) ) { |
|
exit('调用失败'); |
|
} |
|
else{ |
|
header('Cache-Control: max-age=604800'); |
|
header('Content-Type:image/svg+xml'); |
|
echo letter_avatar($text); |
|
} |
|
|
|
} |
|
|
|
//调用ico输出函数 |
|
output_ico(); |