源码
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace Common
{
public class ValidateCode
{
/// <summary>
/// 验证码长度
/// </summary>
public int CodeLen { get; set; }
/// <summary>
/// 验证码
/// </summary>
public string VCode { get; private set; }
/// <summary>
/// 验证码图像
/// </summary>
public Bitmap VCodeImg { get; private set; }
private int fineness = 70;//图片清晰度 数值越大越清晰
private int imgWidth = 48;//图片宽度
private int imgHeight = 24;//图片高度
private int fontSize = 14;//字体大小
private string fontFamily = "Microsoft YaHei";//字体名称
/// <summary>
/// 生成验证码
/// </summary>
public string CreateVCode(int codeLen = 4)
{
CodeLen = codeLen;
string vCode = "";
Random random = new Random();
for (int i = 0; i < CodeLen; i++)
{
int n = random.Next(10);
vCode += n.ToString();
}
VCode = vCode;
return vCode;
}
/// <summary>
/// 验证码图像Byte
/// </summary>
/// <returns></returns>
public byte[] GetCodeImgByte()
{
VCodeImg = new Bitmap(imgWidth, imgHeight);
//生成像素点
DrawPixel(VCodeImg);
//绘制验证码图像
DrewVCode(VCodeImg, VCode);
//Bitmap转byte[]
byte[] imgByte = BitmapToByte(VCodeImg);
return imgByte;
}
/// <summary>
/// 生成像素点
/// </summary>
private void DrawPixel(Bitmap bitmap)
{
Random random = new Random();
for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
if (random.Next(90) <= fineness)
bitmap.SetPixel(i, j, Color.LightGray);
}
}
}
/// <summary>
/// 绘制验证码图像
/// </summary>
/// <param name="bitmap"></param>
private void DrewVCode(Bitmap bitmap,string vCode)
{
Graphics g = Graphics.FromImage(bitmap);
Font font = new Font(fontFamily, fontSize, FontStyle.Regular);
g.DrawString(vCode, font, Brushes.Black, 0, 0);
}
/// <summary>
/// Bitmap转byte[]
/// </summary>
private byte[] BitmapToByte(Bitmap bitmap)
{
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Bmp);
byte[] imgByte = ms.GetBuffer();
return imgByte;
}
}
}
使用
Common.ValidateCode validateCode = new Common.ValidateCode();
//生成验证码
string vCode = validateCode.CreateVCode();
//生成验证码图像Byte
byte[] imgByte = validateCode.GetCodeImgByte();
//获取验证码图像
Bitmap bitmap = validateCode.VCodeImg;
效果