// namespace SafeCampus.Core.Utils; /// /// 头像功能 /// public static class AvatarUtil { #region 姓名生成图片处理 /// /// 获取姓名对应的颜色值 /// /// /// public static string GetNameColor(string name) { if (string.IsNullOrEmpty(name) || name.Length <= 0) throw new Exception("name不能为空"); //获取名字第一个字,转换成 16进制 图片 var str = ""; foreach (var item in name) { str += Convert.ToUInt16(item); } if (str.Length < 4) { str += new Random().Next(100, 1000); } var color = "#" + str.Substring(1, 3); return color; } /// /// 获取姓名对应的图片 /// /// /// /// /// public static SKBitmap GetNameImage(string name, int width = 100, int height = 100) { var color = GetNameColor(name);//获取颜色 var nameLength = name.Length;//获取姓名长度 var nameWritten = name;//需要绘制的文字 if (nameLength > 2)//如果名字长度超过2个 { // 如果用户输入的姓名大于等于3个字符,截取后面两位 var firstName = name.Substring(0, 1); if (IsChinese(firstName)) { // 截取倒数两位汉字 nameWritten = name.Substring(name.Length - 2); } else { // 截取前面的两个英文字母 nameWritten = name.Substring(0, 2).ToUpper(); } } var bmp = new SKBitmap(width, height); using (var canvas = new SKCanvas(bmp)) { canvas.DrawColor(SKColor.Parse(color)); using (var sKPaint = new SKPaint()) { sKPaint.Color = SKColors.White;//字体颜色 sKPaint.TextSize = 25;//字体大小 sKPaint.IsAntialias = true;//开启抗锯齿 sKPaint.Typeface = SKTypeface.FromFamilyName("微软雅黑");//字体 var size = new SKRect(); sKPaint.MeasureText(nameWritten, ref size);//计算文字宽度以及高度 var temp = (bmp.Width - size.Size.Width) / 2; var temp1 = (bmp.Height - size.Size.Height) / 2; canvas.DrawText(nameWritten, temp, temp1 - size.Top, sKPaint);//画文字 } } return bmp; } /// /// 获取图片base64格式 /// /// 名称 /// 宽 /// 高 /// public static string GetNameImageBase64(string name, int width = 100, int height = 100) { var img = GetNameImage(name, width, height); var imgByte = img.ImgToBase64String(); return "data:image/png;base64," + imgByte; } /// /// 用 正则表达式 判断字符是不是汉字 /// /// 待判断字符或字符串 /// 真:是汉字;假:不是 private static bool IsChinese(string text) { return System.Text.RegularExpressions.Regex.IsMatch(text, @"[\u4e00-\u9fbb]"); } #endregion 姓名生成图片处理 }