# 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