PHP實現(xiàn)首字母(截取第一個漢字)生成頭像圖片
會員系統(tǒng)中,用戶如果不上傳自定義頭像,使用固定圖片作為頭像未免有些單調(diào)。PHP可以實現(xiàn)生成用戶名首字母或者第一個漢字(第一個字符)的頭像圖片,不使用第三方API,第三方雖然圖片比較多,但是會有超時。
設(shè)計思路
定義了一個letter_avatar函數(shù),接收一個參數(shù)$text,表示要生成頭像的文字。
使用hash函數(shù)計算出$text的哈希值,并將其解包為一個無符號長整型數(shù)。
將哈希值對360取余得到一個色相值$hue。
使用hsv2rgb函數(shù)將色相、飽和度和亮度轉(zhuǎn)換為RGB分量值。
根據(jù)RGB值生成背景顏色$bg。
設(shè)定文字顏色$color為白色。
使用mb_strtoupper函數(shù)將$text的首字母轉(zhuǎn)為大寫。
使用SVG語法生成一個正方形的背景和一個居中的文字。
使用base64_encode函數(shù)將SVG代碼轉(zhuǎn)為Base64編碼。
將Base64編碼和前綴data:image/svg+xml;base64,拼接成完整的圖片路徑。
返回生成的圖片路徑。 注意:這段代碼只是生成了一個頭像圖片的路徑,并沒有將圖片輸出到頁面中。如果要在頁面中顯示頭像,需要將生成的圖片路徑作為<img>標簽的src屬性值。
完整代碼
//1、方法調(diào)用測試
letter_avatar("hello")
//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 = WEB_PATH . 'temp' . DS . 'avatar' . DS;
$filename = md5('avatar_' . uniqid());
// 生成圖片鏈接
return base64_to_image_url('data:image/svg+xml;base64,' . $src, $tempPath, $filename);
}
</details>
//3、生成https訪問鏈接
function base64_to_image_url($base64_string, $output_folder, $image_name)
{
$data = substr($base64_string, strpos($base64_string, ',') + 1);
// 對數(shù)據(jù)進行Base64解碼
$fileData = base64_decode($data);
// 創(chuàng)建輸出目錄如果它不存在
if (!file_exists($output_folder)) {
mkdir($output_folder, 0755, true);
}
// 將解碼后的數(shù)據(jù)保存到文件
$file = $output_folder . $image_name . '.svg';
if (file_put_contents($file, $fileData)) {
// 返回圖片的URL
return base_url() . 'temp' . DS . 'avatar' . DS . $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)
];
}
總結(jié)
到此這篇關(guān)于PHP實現(xiàn)首字母(截取第一個漢字)生成頭像圖片的文章就介紹到這了,更多相關(guān)PHP字母或漢字生成頭像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP實現(xiàn)一個二維碼同時支持支付寶和微信支付的示例
這篇文章主要介紹了PHP實現(xiàn)一個二維碼同時支持支付寶和微信支付的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
PHP中使用CURL模擬登錄并獲取數(shù)據(jù)實例
這篇文章主要介紹了PHP中使用CURL模擬登錄并獲取數(shù)據(jù)實例,登錄成功后獲取個人頭像并輸出顯示,需要的朋友可以參考下2014-07-07
php多種形式發(fā)送郵件(mail qmail郵件系統(tǒng) phpmailer類)
這篇文章主要介紹了php多種形式發(fā)送郵件的方法,包括使用mail()函數(shù)、使用管道的形式、使用phpmailer類等方法,大家參考使用吧2014-01-01

