PHP实现首字母(截取第一个汉字)生成头像图片

科技   2024-12-18 17:42   湖南  

 

以下是几种使用PHP实现首字母(截取第一个汉字)生成头像图片的方法:

使用内置函数结合SVG生成

以下是一个示例函数,它接受一个字符串作为参数,生成包含该字符串首字母的彩色头像图片路径 :

<?php
function letter_avatar($text{
    // 计算哈希值并转换为无符号长整型数
    $total = unpack('L'hash('adler32'$texttrue))[1];
    // 根据哈希值计算色相值
    $hue = $total % 360;
    // 将色相、饱和度和亮度转换为RGB分量值
    list($r$g$b) = hsv2rgb($hue / 3600.30.9);
    // 生成背景颜色
    $bg = "rgb({$r},{$g},{$b})";
    // 设置文字颜色为白色
    $color = "#ffffff";
    // 获取字符串的首字母并转为大写
    $first = mb_strtoupper(mb_substr($text01));
    // 使用SVG语法生成图像内容
    $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>');
    // 拼接完整的图片路径
    $value = 'data:image/svg+xml;base64,'$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)
    );
}

你可以使用以下方式调用这个函数:

$name = "哈哈";
$logo = letter_avatar($name);
echo '<img lay-src="'.$logo.'" style=" border-radius: 50%;">';

使用 mb_substr() 函数和拼音转换表

这种方法需要一个汉字拼音首字母的转换表,以下是一个简单的示例函数,它通过获取中文字符串的第一个汉字,然后查找其拼音首字母来生成头像图片的首字母 :

<?php
function getFirstCharter($str{
    if(empty($str)){
        return '';
    }
    $fchar = ord($str{0});
    if($fchar>=ord('A')&&$fchar<=ord('z')) {
        return strtoupper($str{0});
    }
    $s1 = iconv('UTF-8','gb2312',$str);
    $s2 = iconv('gb2312','UTF-8',$s1);
    $s = $s2==$str?$s1:$str;
    $asc = ord($s{0})*256+ord($s{1})-65536;
    if($asc>=-20319&&$asc<=-20284return 'A';
    if($asc>=-20283&&$asc<=-19776return 'B';
    if($asc>=-19775&&$asc<=-19219return 'C';
    if($asc>=-19218&&$asc<=-18711return 'D';
    if($asc>=-18710&&$asc<=-18527return 'E';
    if($asc>=-18526&&$asc<=-18240return 'F';
    if($asc>=-18239&&$asc<=-17923return 'G';
    if($asc>=-17922&&$asc<=-17418return 'H';
    if($asc>=-17417&&$asc<=-16475return 'J';
    if($asc>=-16474&&$asc<=-16213return 'K';
    if($asc>=-16212&&$asc<=-15641return 'L';
    if($asc>=-15640&&$asc<=-15166return 'M';
    if($asc>=-15165&&$asc<=-14923return 'N';
    if($asc>=-14922&&$asc<=-14915return 'O';
    if($asc>=-14914&&$asc<=-14631return 'P';
    if($asc>=-14630&&$asc<=-14150return 'Q';
    if($asc>=-14149&&$asc<=-14091return 'R';
    if($asc>=-14090&&$asc<=-13319return 'S';
    if($asc>=-13318&&$asc<=-12839return 'T';
    if($asc>=-12838&&$asc<=-12557return 'W';
    if($asc>=-12556&&$asc<=-11848return 'X';
    if($asc>=-11847&&$asc<=-11056return 'Y';
    if($asc>=-11055&&$asc<=-10247return 'Z';
    return null;
}

你可以这样调用这个函数来获取首字母:

$string = "中文";
$firstLetter = getFirstCharter($string);
echo $firstLetter

使用第三方扩展包 PhpSpreadsheet

PhpSpreadsheet 扩展包中的 StringHelper 类也可以用来获取中文字符的首字母,以下是示例代码 :

<?php
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;

function getChineseFirstLetter($string{
    $firstChar = StringHelper::substring($string01);
    $firstLetter = StringHelper::strtoupper(StringHelper::toAscii($firstChar));
    return $firstLetter;
}

$string = "中文";
$firstLetter = getChineseFirstLetter($string);
echo $firstLetter

使用这种方法需要先安装 PhpSpreadsheet 扩展包,并引入相关命名空间和类 。

使用 php-initial-avatar-generator 包

php-initial-avatar-generator 是一个功能强大的PHP包,能够自动生成以姓名首字母为基础的精美头像.以下是安装和使用示例 :

<?php
// 引入自动加载文件
require_once 'vendor/autoload.php'

// 创建头像实例并生成头像
$avatar = new LasseRafn\InitialAvatarGenerator\InitialAvatar();
$image = $avatar->name('李四')->generate();

// 输出头像图片
header('Content-Type: image/png');
echo $image;

使用这个包之前,需要先通过 composer require lasserafn/php-initial-avatar-generator 命令安装该包.


精英博客探索
关注热点,传递正能量。
 最新文章