一、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#生成验证码实例

C# 实现中文转颜色 - 实现根据名字自动生成头像的更多相关文章

  1. C代码工具--自动生成enum值和名字映射代码

    这年头好像继续做C语言的人不多了,年轻人大多去互联网和移动应用.确实,那两个领域现在来钱快,且总是供不应求.就说刚刚在一个旧同事的微信群里,有人刚放出自己有团队可以做App几分钟,哇塞,好几个人说有项 ...

  2. vs2017更新后web项目部分后台代码类没有颜色,也没有自动提示输入功能

    vs2017有的版本更新后默认.net framework框架是.net framework4.6.1,将项目的.net framework框架更改为4.6.1,颜色和自动提示出现

  3. Color Highlight 鼠标放在 #f3f 上面其背景会变成相应的颜色的插件 DocBlockr自动补全注释

    不是  Color Highlighter    而是 Color Highlight  少了 er  颜色功能还是很爽的,找了好久 鼠标放在 #f3f 上面其背景会变成相应的颜色的插件 DocBlo ...

  4. Lua 读表代码,自动生成字段名字

    表格格式为 INT STRING INT INT INT INT INT Id Desc Type SceneId OpenId MaxPliesp ClearancePlies 第1关 - 第2关 ...

  5. oracle字段由中文前缀加数字,数字自动增长的实现

    table中有一个字段,id,它是由Yunsha_000001的规则组成的. 每当插入一条数据的时候,自动生成的id是自动增加的,如何实现数字部分的自动增长? select  'Yunsha_'||l ...

  6. 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字

    静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...

  7. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  8. vim note

    2016-1-22 vim plugin collections: (参考 https://www.youtube.com/watch?v=0QFR-_wUoA0) vim-pathogen  插件管 ...

  9. VMD的相关命令(转载)

    转载自:http://blog.sina.com.cn/s/blog_b48a7ac30102w6xg.html 自我学习总结: 1.打开VMD main上Extensions中的TkConsole这 ...

  10. 最牛逼android上的图表库MpChart(一) 介绍篇

    最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...

随机推荐

  1. OpenStack全网最全部署教程

    简单介绍 简单点来说就是一个云,一个属于自己的云平台,openstack的原版是亚马逊云,可以说openstack就是Rackspace和NASA的抄袭产物. 官方点说一个云平台管理的项目,它不是一个 ...

  2. c# 属性类(特性)

    前言 c# 属性类也称做特性.这是一篇垫文,为后面的过滤器和其他特性类的东西做铺垫. 正文 看一段代码: static void Main(string[] args) { Attribitefunc ...

  3. Pytorch-tensor维度的扩展,挤压,扩张

    数据本身不发生改变,数据的访问方式发生了改变 1.维度的扩展 函数:unsqueeze() # a是一个4维的 a = torch.randn(4, 3, 28, 28) print('a.shape ...

  4. CSS 中 MASK 实现图片遮罩登炫酷效果

    顾名思义,mask 译为遮罩.在 CSS 中,mask 属性允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域. 其实 mask 的出现已经有一段时间了,只是没有特别多 ...

  5. gRPC repeated数组的使用 python

    reco.proto syntax = "proto3"; package rpc_package; service HelloWorldService { rpc SayHell ...

  6. 力扣1083(MySQL)-销售分析Ⅱ(简单)

    题目: 编写一个 SQL 查询,查询购买了 S8 手机却没有购买 iPhone 的买家.注意这里 S8 和 iPhone 是 Product 表中的产品. 查询结果格式如下图表示: Product t ...

  7. 解析 RocketMQ 业务消息——“事务消息”

    简介: 本篇文章通过拆解 RocketMQ 事务消息的使用场景.基本原理.实现细节和实战使用,帮助大家更好的理解和使用 RocketMQ 的事务消息. 作者:合伯   引言:在分布式系统调用场景中存在 ...

  8. 云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator

    作者 | 刘睿.杜恒 导读:RocketMQ Operator 现已加入 OperatorHub,正式进入 Operator 社区.本文将从实践出发,结合案例来说明,如何通过 RocketMQ Ope ...

  9. 企业版Spark Databricks + 企业版Kafka Confluent 联合高效挖掘数据价值

    ​简介:本文介绍了如何使用阿里云的Confluent Cloud和Databricks构建数据流和LakeHouse,并介绍了如何使用Databricks提供的能力来挖掘数据价值,使用Spark ML ...

  10. 【全观测系列】Elasticsearch应用性能监控最佳实践

    ​简介:本文介绍了应用性能监控的应用价值以及解决方案等. 1.什么是全观测? 要了解全观测,我们先看看传统运维存在哪些问题. 数据孤岛,分散在不同部门,分析排查故障困难: 多个厂商的多种工具,无法自动 ...