# Maltose.Net **Repository Path**: misslius/Maltose.Net ## Basic Information - **Project Name**: Maltose.Net - **Description**: 记录自己的实用库 这是 .NET CORE 3.1版本 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-03-13 - **Last Updated**: 2022-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Maltose.Net #### 介绍 记录自己用的工具库 最低版本是 .NET CORE 3.1 以后会同步跟着 .NET CORE升级 .NETX 建议使用 VS 2019 #### Maltose.Data 默认使用 MSSQL数据库 希望你的版本是 2012 以及 以上 现在你可以更方便的连接数据库 如果你需要使用它,请在项目根目录下新建一个 app.config.json 配置文件 它默认读取 DbConnectionStrings:{枚举} 下面的任何一条配置文件 看起来像这样 ``` { "DbConnectionStrings": { "Default":"写上你的数据库连接字符串" } } ``` #region 创建模板活码 /// /// 自定义字体 /// static SKTypeface Font; /// /// 保存DIY活码 /// /// /// 保存文件 /// 背景地址 /// 二维码地址 /// 图形地址 /// 标题 /// 子标题 string CreateDiyImage(string dir, string fileName, string bgPath, string qrPath, string logoPath, string title, string text) { if (Font == null) { var fontPath = $"{App.WebHostEnvironment.WebRootPath}/Captcha/Font/AlibabaPuHuiTi-2-45-Light.ttf"; using (FileStream fs = File.OpenRead(fontPath)) { Font = SKTypeface.FromStream(fs); } } //获取背景 var bgMap = SKBitmap.Decode(bgPath); var bgImageSize = new SKSizeI(1368, 900); var bgImage = bgMap.Resize(bgImageSize, SKFilterQuality.High); var mapInfo = new SKImageInfo(1368, 2048); var map = SKBitmap.FromImage(SKImage.Create(mapInfo)); using var canvas = new SKCanvas(map); canvas.DrawColor(SKColors.White); canvas.DrawBitmap(bgImage, 0, 0); //获取二维码 var qrMap = SKBitmap.Decode(qrPath); var qrSize = new SKSizeI(qrMap.Width * 2, qrMap.Height * 2); var qrImage = qrMap.Resize(qrSize, SKFilterQuality.High); var qrX = (map.Width - qrImage.Width) / 2; var qrY = (map.Height - bgImage.Height - qrImage.Height) / 2 + bgImage.Height; canvas.DrawBitmap(qrImage, qrX, qrY); //二维码LOGO if (!string.IsNullOrWhiteSpace(logoPath)) { var logoMap = SKBitmap.Decode(logoPath); var logoSize = new SKSizeI(160, 160); var logoImage = logoMap.Resize(logoSize, SKFilterQuality.High); var logoX = (qrImage.Width - logoImage.Width) / 2 + qrX; var logoY = (qrImage.Width - logoImage.Width) / 2 + qrY; canvas.DrawBitmap(logoImage, logoX, logoY); } float titleY = 248; float textX = 120; float textWidth = mapInfo.Width - (textX * 2); if (!string.IsNullOrWhiteSpace(title)) { //标题文字 13 var titlePaint = new SKPaint { Color = SKColors.White, TextSize = 85F, Typeface = Font, FakeBoldText = true }; canvas.DrawText(title, textX, titleY, titlePaint); } if (!string.IsNullOrWhiteSpace(text)) { //子标题 100 var textPaint = new SKPaint { Color = SKColors.White, TextSize = 65F, Typeface = Font }; float textLineWidth = 0; var startIndex = 0; var textlineHeight = titleY + 150; for (int i = 0; i < text.Length; i++) { textLineWidth += textPaint.MeasureText(text[i].ToString()); if (textLineWidth >= textWidth) { var length = startIndex == 0 ? i - startIndex + 1 : i - startIndex; canvas.DrawText(text.Substring(startIndex, length), textX, textlineHeight, textPaint); startIndex = i; textLineWidth = 0; textlineHeight += 20 + Convert.ToInt32(textPaint.TextSize); } if (i == text.Length - 1) { canvas.DrawText(text.Substring(startIndex, i - startIndex + 1), textX, textlineHeight, textPaint); } } } var stream = SKImage.FromBitmap(map).Encode(SKEncodedImageFormat.Png, 100).AsStream(); return _fileFactory.Create(dir, fileName, stream).FilePath; } #endregion