WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
随笔 - 1079, 文章 - 1, 评论 - 75, 阅读 - 174万
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

C# 实现中文转颜色 - 实现根据名字自动生成头像

Posted on   WebEnh  阅读(109)  评论(0编辑  收藏  举报

一、C#实现中文转颜色 - 实现根据名字自动生成头像

原理说明:

 

由于名字图像是自动生成,背景颜色不一样,可以考虑一下几种方法:

     1)使用随机数来自动生成一个16进制颜色字符串,作为头像的背景颜色;

     2)获取名字的第一个字,转换成16进制文字颜色字符串,作为头像背景颜色;

 

注:推荐第二个方案,第二个的话,可以让同一个姓的用户,北京颜色相同。

 

代码整理如下:

复制代码
复制代码
    /// <summary>
    /// 常用图片,操作方法整理
    /// </summary>
    public class ImageHelper
    {
        #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进制 图片
            string str = "";
            foreach (var item in name)
            {
                str += Convert.ToUInt16(item);
            }
            if (str.Length < 4)
            {
                str += new Random().Next(100, 1000);
            }
            string 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 Bitmap GetNameImage(string name,int width=132,int height=132)
        {
            string color = GetNameColor(name);
            string firstName = name.Substring(0,1);
            Bitmap img = new Bitmap(width,height);
            Graphics g = Graphics.FromImage(img);
            Brush brush = new SolidBrush(ColorTranslator.FromHtml(color));
            g.FillRectangle(brush,0,0,width,height);
            //填充文字
            Font font = new Font("微软雅黑", 50);
            SizeF firstSize= g.MeasureString(firstName,font);
            g.DrawString(firstName,font,Brushes.White,new PointF((img.Width - firstSize.Width)/2, (img.Height - firstSize.Height) / 2));
            g.Dispose();
            return img;
        }
        /// <summary>
        /// 保存图片到磁盘
        /// </summary>
        /// <param name="name"></param>
        /// <param name="targetFile"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public static Bitmap SaveNameImage(string name, string targetFile, int width = 132, int height = 132)
        {
            Bitmap img = GetNameImage(name,width,height);
            img.Save(targetFile,Drawing.Imaging.ImageFormat.Jpeg);
            img.Dispose();
            return img;
        }
        #endregion
    }
复制代码
复制代码

 

测试结果:

复制代码
复制代码
        static void ImgTest2()
        {
            ImageHelper.SaveNameImage("张三丰", @"D:\QLTest\Core3_Solution\Core3Test1\Core3Test1\bin\Debug\1.jpg");
            ImageHelper.SaveNameImage("李四", @"D:\QLTest\Core3_Solution\Core3Test1\Core3Test1\bin\Debug\2.jpg");
            ImageHelper.SaveNameImage("王五", @"D:\QLTest\Core3_Solution\Core3Test1\Core3Test1\bin\Debug\3.jpg");
            ImageHelper.SaveNameImage("1234", @"D:\QLTest\Core3_Solution\Core3Test1\Core3Test1\bin\Debug\4.jpg");
            ImageHelper.SaveNameImage("a", @"D:\QLTest\Core3_Solution\Core3Test1\Core3Test1\bin\Debug\5.jpg");
            ImageHelper.SaveNameImage("b", @"D:\QLTest\Core3_Solution\Core3Test1\Core3Test1\bin\Debug\6.jpg");
        }
复制代码
复制代码

 

 

 

更多:

GDI+ DrawString字间距处理

使用GDI+ 处理图片成圆图

C#生成验证码实例  

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多