using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace GxPress.Common.Tools
{
///
/// 验证码
///
public static class CaptchaHelper
{
///
/// 该方法是将生成的随机数写入图像文件
///
/// code是一个随机数
/// 生成位数(默认4位)
public static MemoryStream Create(out string code, int numbers = 4)
{
code = RandomGenerator.GetString(numbers);
//生成验证码图片
var random = new Random();
//验证码颜色集合
Color[] c =
{
Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan,
Color.Purple
};
//验证码字体集合
string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
//定义图像的大小,生成图像的实例
var img = new Bitmap(code.Length * 18, 32);
var g = Graphics.FromImage(img);
g.Clear(Color.White); //背景设为白色
//在随机位置画背景点
for (var i = 0; i < 100; i++)
{
var x = random.Next(img.Width);
var y = random.Next(img.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
}
//验证码绘制在g中
for (var i = 0; i < code.Length; i++)
{
var cIndex = random.Next(7); //随机颜色索引值
var fIndex = random.Next(5); //随机字体索引值
var f = new Font(fonts[fIndex], 15, FontStyle.Bold); //字体
Brush b = new SolidBrush(c[cIndex]); //颜色
var ii = 4;
if ((i + 1) % 2 == 0) //控制验证码不在同一高度
ii = 2;
g.DrawString(code.Substring(i, 1), f, b, 3 + i * 12, ii); //绘制一个验证字符
}
var ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg); //将此图像以Png图像文件的格式保存到流中
//回收资源
g.Dispose();
img.Dispose();
return ms;
}
}
}