53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
|
|
package utils
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"net/url"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// AvatarServiceBaseURL 默认头像服务基础URL (使用 UI Avatars API)
|
|||
|
|
const AvatarServiceBaseURL = "https://ui-avatars.com/api"
|
|||
|
|
|
|||
|
|
// DefaultAvatarSize 默认头像尺寸
|
|||
|
|
const DefaultAvatarSize = 100
|
|||
|
|
|
|||
|
|
// AvatarInfo 头像信息
|
|||
|
|
type AvatarInfo struct {
|
|||
|
|
Username string
|
|||
|
|
Nickname string
|
|||
|
|
Avatar string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetAvatarOrDefault 获取头像URL,如果为空则返回在线头像生成服务的URL
|
|||
|
|
// 优先使用已有的头像,否则使用昵称或用户名生成默认头像
|
|||
|
|
func GetAvatarOrDefault(username, nickname, avatar string) string {
|
|||
|
|
if avatar != "" {
|
|||
|
|
return avatar
|
|||
|
|
}
|
|||
|
|
// 使用用户名生成默认头像URL(优先使用昵称)
|
|||
|
|
displayName := nickname
|
|||
|
|
if displayName == "" {
|
|||
|
|
displayName = username
|
|||
|
|
}
|
|||
|
|
return GenerateDefaultAvatarURL(displayName)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetAvatarOrDefaultFromInfo 从 AvatarInfo 获取头像URL
|
|||
|
|
func GetAvatarOrDefaultFromInfo(info AvatarInfo) string {
|
|||
|
|
return GetAvatarOrDefault(info.Username, info.Nickname, info.Avatar)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GenerateDefaultAvatarURL 生成默认头像URL
|
|||
|
|
// 使用 UI Avatars API 生成基于用户名首字母的头像
|
|||
|
|
func GenerateDefaultAvatarURL(name string) string {
|
|||
|
|
if name == "" {
|
|||
|
|
name = "?"
|
|||
|
|
}
|
|||
|
|
// 使用 UI Avatars API 生成头像
|
|||
|
|
params := url.Values{}
|
|||
|
|
params.Set("name", url.QueryEscape(name))
|
|||
|
|
params.Set("size", "100")
|
|||
|
|
params.Set("background", "0D8ABC") // 默认蓝色背景
|
|||
|
|
params.Set("color", "ffffff") // 白色文字
|
|||
|
|
return AvatarServiceBaseURL + "?" + params.Encode()
|
|||
|
|
}
|