添加项目文件。

This commit is contained in:
fuenmao
2025-09-29 13:48:36 +08:00
parent f61e922f0c
commit 5dc1780ef1
407 changed files with 63703 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.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 姓名生成图片处理
}
+223
View File
@@ -0,0 +1,223 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Core.Utils;
public static class ImageUtil
{
/// <summary>
/// 图片转换成base64
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static string ImgToBase64String(SKImage img)
{
try
{
var p = img.Encode(SKEncodedImageFormat.Png, 100);
var arr = p.ToArray();
return Convert.ToBase64String(arr);
}
catch
{
return string.Empty;
}
}
/// <summary>
/// 图片转换成base64
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static string ImgToBase64String(this SKBitmap bmp)
{
try
{
var img = SKImage.FromBitmap(bmp);
var p = img.Encode(SKEncodedImageFormat.Png, 100);
var arr = p.ToArray();
return Convert.ToBase64String(arr);
}
catch
{
return string.Empty;
}
}
/// <summary>
/// base64转bitmap
/// </summary>
/// <param name="base64String"></param>
/// <returns></returns>
public static Bitmap GetBitmapFromBase64(this string base64String)
{
var b = Convert.FromBase64String(base64String);
var ms = new MemoryStream(b);
var bitmap = new Bitmap(ms);
ms.Close();
return bitmap;
}
/// <summary>
/// base64转bitmap
/// </summary>
/// <param name="base64String"></param>
/// <returns></returns>
public static SKBitmap GetSkBitmapFromBase64(this string base64String)
{
var b = Convert.FromBase64String(base64String);
var bitmap = SKBitmap.Decode(b);
return bitmap;
}
/// <summary>
/// base64转image格式
/// </summary>
/// <param name="base64String"></param>
/// <returns></returns>
public static string ToImageBase64(this string base64String)
{
return "data:image/png;base64," + base64String;
}
/// <summary>
/// 重新修改尺寸
/// </summary>
/// <param name="imgToResize">图片</param>
/// <param name="size">尺寸</param>
/// <returns></returns>
public static Bitmap ResizeImage(Image imgToResize, Size size)
{
//获取图片宽度
var sourceWidth = imgToResize.Width;
//获取图片高度
var sourceHeight = imgToResize.Height;
float nPercent;
//计算宽度的缩放比例
var nPercentW = size.Width / (float)sourceWidth;
//计算高度的缩放比例
var nPercentH = size.Height / (float)sourceHeight;
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
//期望的宽度
var destWidth = (int)(sourceWidth * nPercent);
//期望的高度
var destHeight = (int)(sourceHeight * nPercent);
var b = new Bitmap(destWidth, destHeight);
var g = Graphics.FromImage(b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//绘制图像
g.DrawImage(imgToResize, 0, 0, destWidth,
destHeight);
g.Dispose();
return b;
}
/// <summary>
/// Resize图片
/// </summary>
/// <param name="bmp">原始Bitmap </param>
/// <param name="newW">新的宽度</param>
/// <param name="newH">新的高度</param>
/// <returns>处理以后的图片</returns>
public static Bitmap ResizeImage(this Bitmap bmp, int newW, int newH)
{
try
{
var b = new Bitmap(newW, newH);
var g = Graphics.FromImage(b);
// 插值算法的质量
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
g.Dispose();
return b;
}
catch
{
return null;
}
}
/// <summary>
/// Resize图片
/// </summary>
/// <param name="bmp">原始Bitmap </param>
/// <param name="newW">新的宽度</param>
/// <param name="newH">新的高度</param>
/// <returns>处理以后的图片</returns>
public static SKBitmap ResizeImage(this SKBitmap bmp, int newW, int newH)
{
try
{
var b = new SKBitmap(newW, newH);
var resized = b.Resize(new SKImageInfo(newW, newH), SKFilterQuality.High);
if (resized is null)
{
return null;
}
var image = SKImage.FromBitmap(resized);
return b;
}
catch
{
return null;
}
}
/// <summary>
/// 获取缩略图
/// </summary>
/// <param name="bmp"></param>
/// <param name="w">宽</param>
/// <param name="h">高</param>
/// <returns></returns>
public static Image GetPicThumbnail(this Bitmap bmp, int w, int h)
{
try
{
var thumbnail = bmp.GetThumbnailImage(w, h, () => false, IntPtr.Zero);
return thumbnail;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 获取缩略图
/// </summary>
/// <param name="bmp"></param>
/// <param name="w">宽</param>
/// <param name="h">高</param>
/// <returns></returns>
public static SKImage GetPicThumbnail(this SKBitmap bmp, int w, int h)
{
try
{
var resized = bmp.Resize(new SKImageInfo(w, h), SKFilterQuality.Medium);
if (resized is null)
{
return null;
}
var image = SKImage.FromBitmap(resized);
return image;
}
catch (Exception)
{
return null;
}
}
}