This commit is contained in:
2025-06-27 15:24:58 +08:00
parent 8112aa5dec
commit c30ff3cca1
18 changed files with 822 additions and 73 deletions
+6 -73
View File
@@ -2,6 +2,8 @@
namespace app\mzl\common\utils;
use app\console\model\CommentAvatarModel;
class ForeignUserGenerator
{
// 阿拉伯男性名字(迪拜)
@@ -187,83 +189,14 @@ class ForeignUserGenerator
}
/**
* 生成真人风格头像(使用本地服务)
*
* 组合使用以下服务:
* 1. 随机用户API获取基础头像
* 2. 使用ImageMagick进行本地处理增强真实感
* 从hs_comment_avatar随机获取头像
*/
public static function generateAvatar(string $gender = 'random', string $ethnicity = 'random'): string
public static function generateAvatar(): string
{
// 获取基础头像
$baseAvatar = self::getRandomUserAvatar();
if (!$baseAvatar) {
// 如果API不可用,使用备用方法
return self::generateFallbackAvatar($gender, $ethnicity);
}
// 增强头像真实感
return self::enhanceAvatar($baseAvatar);
$avatar = CommentAvatarModel::query()->inRandomOrder()->value('avatar');
return $avatar ?: '';
}
/**
* 从随机用户API获取基础头像
*/
private static function getRandomUserAvatar(): ?string
{
$nationalities = ['gb', 'fr', 'de', 'es', 'ir', 'tr', 'us', 'ca'];
$nationality = $nationalities[array_rand($nationalities)];
$url = "https://randomuser.me/api/?nat={$nationality}&inc=picture";
try {
$response = file_get_contents($url);
$data = json_decode($response, true);
if (isset($data['results'][0]['picture']['large'])) {
return $data['results'][0]['picture']['large'];
}
} catch (Exception $e) {
// 记录错误或忽略
}
return null;
}
/**
* 增强头像真实感
*/
private static function enhanceAvatar(string $imageUrl): string
{
// 下载图像
$imageData = file_get_contents($imageUrl);
$tempInput = tempnam(sys_get_temp_dir(), 'avatar') . '.jpg';
file_put_contents($tempInput, $imageData);
// 创建输出文件名
$outputFile = 'avatars/' . uniqid('enhanced_') . '.jpg';
// 清理临时文件
unlink($tempInput);
return $outputFile;
}
/**
* 备用头像生成方法
*/
private static function generateFallbackAvatar(string $gender, string $ethnicity): string
{
// 使用ThisPersonDoesNotExist服务
$url = 'https://thispersondoesnotexist.com/';
$imageData = file_get_contents($url);
$outputFile = 'avatars/' . uniqid('fallback_') . '.jpg';
file_put_contents($outputFile, $imageData);
return $outputFile;
}
/**
* 批量生成用户数据