|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
-
- //
-
-
-
-
-
-
-
-
- namespace SafeCampus.Core.Utils;
-
- /// <summary>
- /// 头像功能
- /// </summary>
- public static class AvatarUtil
- {
- #region 姓名生成图片处理
-
- /// <summary>
- /// 获取姓名对应的颜色值
- /// </summary>
- /// <param name="name"></param>
- /// <returns></returns>
- 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;
- }
-
- /// <summary>
- /// 获取姓名对应的图片
- /// </summary>
- /// <param name="name"></param>
- /// <param name="width"></param>
- /// <param name="height"></param>
- /// <returns></returns>
- 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;
- }
-
- /// <summary>
- /// 获取图片base64格式
- /// </summary>
- /// <param name="name">名称</param>
- /// <param name="width">宽</param>
- /// <param name="height">高</param>
- /// <returns></returns>
- 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;
- }
-
- /// <summary>
- /// 用 正则表达式 判断字符是不是汉字
- /// </summary>
- /// <param name="text">待判断字符或字符串</param>
- /// <returns>真:是汉字;假:不是</returns>
- private static bool IsChinese(string text)
- {
- return System.Text.RegularExpressions.Regex.IsMatch(text, @"[\u4e00-\u9fbb]");
- }
-
- #endregion 姓名生成图片处理
- }
|