C# 实现中文转颜色 - 实现根据名字自动生成头像
一、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");
}
更多:
C# 实现中文转颜色 - 实现根据名字自动生成头像的更多相关文章
- C代码工具--自动生成enum值和名字映射代码
这年头好像继续做C语言的人不多了,年轻人大多去互联网和移动应用.确实,那两个领域现在来钱快,且总是供不应求.就说刚刚在一个旧同事的微信群里,有人刚放出自己有团队可以做App几分钟,哇塞,好几个人说有项 ...
- vs2017更新后web项目部分后台代码类没有颜色,也没有自动提示输入功能
vs2017有的版本更新后默认.net framework框架是.net framework4.6.1,将项目的.net framework框架更改为4.6.1,颜色和自动提示出现
- Color Highlight 鼠标放在 #f3f 上面其背景会变成相应的颜色的插件 DocBlockr自动补全注释
不是 Color Highlighter 而是 Color Highlight 少了 er 颜色功能还是很爽的,找了好久 鼠标放在 #f3f 上面其背景会变成相应的颜色的插件 DocBlo ...
- Lua 读表代码,自动生成字段名字
表格格式为 INT STRING INT INT INT INT INT Id Desc Type SceneId OpenId MaxPliesp ClearancePlies 第1关 - 第2关 ...
- oracle字段由中文前缀加数字,数字自动增长的实现
table中有一个字段,id,它是由Yunsha_000001的规则组成的. 每当插入一条数据的时候,自动生成的id是自动增加的,如何实现数字部分的自动增长? select 'Yunsha_'||l ...
- 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字
静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- vim note
2016-1-22 vim plugin collections: (参考 https://www.youtube.com/watch?v=0QFR-_wUoA0) vim-pathogen 插件管 ...
- VMD的相关命令(转载)
转载自:http://blog.sina.com.cn/s/blog_b48a7ac30102w6xg.html 自我学习总结: 1.打开VMD main上Extensions中的TkConsole这 ...
- 最牛逼android上的图表库MpChart(一) 介绍篇
最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...
随机推荐
- maven 创建spring boot 需要的配置[一]
前言 之所以写这个是因为现在官方推荐云创建: 所以标注一下maven project,创建后,如何导入spring boot. 正文 1.步骤一 在pom.xml 中加入: <dependenc ...
- 批处理for 的理解及例子
前言 首先for的代码形式是: for %i in (set) do command 这里面有一些小知识知识点: 比如说i是变量,那么i可以换成其他字符吗?答案是可以的.但是必须是26个字母中的其中一 ...
- Flask搭建APP统一管理平台
主页效果: 1.从数据库中获取所有APP的信息,每个卡片上展示APP名称.bundle id.版本构建历史记录,系统类型等构建信息 2.支持查询筛选,模糊查询 3.点击历史记录跳转APP历史记录详情页 ...
- 距离传感器GT2的使用介绍
一. 1.使用注意要点: (1)要使用到"清零"功能. 确定其内部清零软元件,认准"外部请求",注意组别容易混淆. (2)如果要用到"复位" ...
- 力扣374(java&python)-猜数字大小(简单)
题目: 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字.如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了.你可以通过调用一个预先定 ...
- 将 Terraform 生态粘合到 Kubernetes 世界
简介: 为了更高效,统一的管理云服务,IaC 思想近年来盛行,其中 Terrafrom 更是成功得到了几乎所有的云厂商的采纳和支持.以 Terrafrom 模型为核心的云服务 IaC 生态已经形成.然 ...
- 码住!Flink Contributor 速成指南
简介: 不管初衷是什么,Flink 都非常欢迎大家一起建设和完善社区.在开始具体的贡献步骤之前,我们先简要介绍一下参与贡献的几种途径,以及 Clarify 关于开源贡献的一些固有印象. 作者:伍翀(云 ...
- Go 调用 Java 方案和性能优化分享
简介: 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子. 作者 | 响风 来源 | 阿里技术公众号 一 背景 一个基于 Golang 编写的日志收集和清洗的应 ...
- dotnet 警惕 async void 线程顶层异常
在应用程序设计里面,不单是 dotnet 应用程序,绝大部分都会遵循让应用在出现未处理异常状态时终结的原则.在 dotnet 应用里面,如果一个线程顶层出现未捕获异常,则应用进程将会被认为出现异常状态 ...
- dotnet 使用 XWT 构建跨平台客户端 入门篇
本文告诉大家如何入门开始开发一个基于 mono 组织开源的 XWT 跨平台客户端 UI 框架的应用,本文的 xwt 是在 GitHub 上完全开源的,基于 MIT 协议的,底层采用 GTK# 的 UI ...