.NET Core利用skiasharp文字头像生成方法教程(基于
编程学习 2021-07-04 22:41www.dzhlxh.cn编程入门
这篇文章主要给大家介绍了关于.NET Core利用skiasharp文字头像生成(基于docker发布)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们狼蚁网站SEO优化随着长沙网络推广来一起学习学习吧。
一、问题背景
目前.NET Core狼蚁网站SEO优化针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸懵逼的我,只能百度+谷歌看看有没啥解决方案,好在网上资料也多,.NET Core下的图像处理还是有些开源库的,我目前使用的其中一个:,介绍反正大家自己网上找找都有,狼蚁网站SEO优化就用该库实现一个文字头像的小功能,话不多说了,来一起看看详细的介绍吧。
二、简单的设计要求
- 对于输入的名字得解析(中文、英文)
- 图片背景色随机会换
- 文字要居中(废话,不居中不是丑爆了)
三、具体实现
1、解析姓名信息
private String ResolveName(String imageText) { imageText.Replace("?", "").Replace(":", "").Replace("?", "").Replace("*", "").Replace("<", "").Replace(">", "").Replace(@"/", "").Replace(@"\", "").Replace(@"|", "").Replace("\"", "");//去除路径不支持的信息 imageText = imageText.Trim(' ');//去除空格信息 String temp2 = imageText.Substring(0, 1);//根据第一位的数据判断是走英文规则还是中文规则,都不是的话就是取前两位 if (RegexLib.IsChineseCharacter(temp2)) { //UserName = UserName.Trim(' '); if (imageText.Length > 2 & imageText.Length <= 3) { imageText = imageText.Substring(1, 2); } else if (imageText.Length >= 3) { imageText = imageText.Substring(imageText.Length - 2, 2); } } else if (RegexLib.IsEnglishCharacter(temp2)) { String[] temp1 = imageText.Split(' '); if (temp1.Length == 2) { imageText = (temp1[0].Substring(0, 1) + temp1[1].Substring(0, 1)).ToUpper(); } else { if (imageText.Length > 2) { imageText = imageText.Substring(0, 2).ToUpper(); } } } else { if (imageText.Length > 2) { imageText = imageText.Substring(0, 2); } } imageName = imageText; return imageName; }
2、根据文字生成图片
public byte[] Create() { String name = imageName + ".jpg"; SKBitmap bmp = new SKBitmap(128, 128); String str = imageName; using (SKCanvas canvas = new SKCanvas(bmp)) { Random r = new Random(); int num = r.Next(0, 9); canvas.DrawColor(colors[num]); // colors是图片背景颜色集合,这里代码就不贴出来了,随机找一个 using (SKPaint sKPaint = new SKPaint()) { sKPaint.Color = SKColors.White;//字体颜色 sKPaint.TextSize = 39;//字体大小 sKPaint.IsAntialias = true;//开启抗锯齿 sKPaint.Typeface = SkiaSharp.SKTypeface.FromFamilyName("微软雅黑", SKTypefaceStyle.Bold);//字体 SKRect size = new SKRect(); sKPaint.MeasureText(str, ref size);//计算文字宽度以及高度 float temp = (128 - size.Size.Width) / 2; float temp1 = (128 - size.Size.Height) / 2; canvas.DrawText(str, temp, temp1 - size.Top, sKPaint);//画文字 } //保存成图片文件 using (SKImage img = SKImage.FromBitmap(bmp)) { using (SKData p = img.Encode(SKEncodedImageFormat.Jpeg, 100)) { return p.ToArray(); //using (var stream = File.Create(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "photoImage", name))) //{ // stream.Write(p.ToArray(), 0, p.ToArray().Length); // return stream; /