为什么要造这样的轮子?不是有人造过了吗?
- System.Draw 下的大多数api都仅支持windows平台
- 目前百度到的资源很少很少....就算找到了,也跟我们想要的没有太大关系
开搞
- 先装一个Nuget包 SkiaSharp 然后我他吗直接上代码
- 这是一个创建验证码的方法,如果您有需要的话就cv过去,有注释的,稍微改改就可以了
public MemoryStream CreatePng()
{
Random random = new();
string code = random.Next(1000, 9999).ToString();
//验证码颜色集合
var colors = new[] { SKColors.Black, SKColors.Red, SKColors.DarkBlue, SKColors.Green, SKColors.Orange, SKColors.Brown, SKColors.DarkCyan, SKColors.Purple };
//验证码字体集合
var fonts = new[] { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
//相当于js的 canvas.getContext('2d')
using var image2d = new SKBitmap(100, 30, SKColorType.Bgra8888, SKAlphaType.Premul);
//相当于前端的canvas
using var canvas = new SKCanvas(image2d);
//填充白色背景
canvas.DrawColor(SKColors.AntiqueWhite);
//样式 跟xaml差不多
using var drawStyle = new SKPaint();
//填充验证码到图片
for (int i = 0; i < code.Length; i++)
{
drawStyle.IsAntialias = true;
drawStyle.TextSize = 30;
var font = SKTypeface.FromFamilyName(fonts[random.Next(0, fonts.Length - 1)], SKFontStyleWeight.SemiBold, SKFontStyleWidth.ExtraCondensed, SKFontStyleSlant.Upright);
drawStyle.Typeface = font;
drawStyle.Color = colors[random.Next(0, colors.Length - 1)];
//写字
canvas.DrawText(code[i].ToString(), (i + 1) * 16, 28, drawStyle);
}
//生成三条干扰线
for (int i = 0; i < 3; i++)
{
drawStyle.Color = colors[random.Next(colors.Length)];
drawStyle.StrokeWidth = 1;
canvas.DrawLine(random.Next(0, code.Length * 15), random.Next(0, 60), random.Next(0, code.Length * 16), random.Next(0, 30), drawStyle);
}
//巴拉巴拉的就行了
using var img = SKImage.FromBitmap(image2d);
using var p = img.Encode(SKEncodedImageFormat.Png, 100);
using var ms = new MemoryStream();
//保存到流
p.SaveTo(ms);
return ms;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。