using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace BitmapTest
{
class Program
{
static void Main(string[] args)
{
VerifyCode verifyCode = new VerifyCode();
verifyCode.Generate();
verifyCode.Save();
}
}
/// <summary>
/// 验证码类
/// </summary>
public class VerifyCode
{
public Bitmap bitmap { private set; get; }
public string code { private set; get; }
private Random random = new Random();
private string fontFamily = "Verdana";
private List<char> chars = new List<char>();
public VerifyCode()
{
//把A到Z放到列表中
for (int c = 65; c <= 90; c++)
chars.Add((char)c);
}
//生成验证码图片
public void Generate()
{
Bitmap tmp = new Bitmap(80, 30, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(tmp);
g.SmoothingMode = SmoothingMode.HighQuality;
g.Clear(Color.DarkGray);
Font font = new Font(fontFamily, 16, FontStyle.Strikeout);
SolidBrush brush = new SolidBrush(Color.White);
StringFormat format = new StringFormat(StringFormatFlags.NoClip);
format.Alignment = StringAlignment.Near;
format.LineAlignment = StringAlignment.Center;
RectangleF rect = new RectangleF(0, 0, tmp.Width, tmp.Height);
code = "";
//随机显示5个字母
for (int i = 0; i < 5; i++)
{
//字母位置
if (i == 0)
g.TranslateTransform(3, 0);
else
g.TranslateTransform(13, 0);
//字母随机旋转
g.RotateTransform(-4 + random.Next(8));
//随机字母
string c = chars[random.Next(chars.Count)].ToString();
g.DrawString(c, font, brush, rect, format);
code += c;
}
g.ResetTransform();
AddBackgroundNoisePoint(tmp, g);
bitmap = tmp;
}
//保存验证码图片
public void Save()
{
if (null != bitmap)
bitmap.Save("VerifyCode.png", ImageFormat.Png);
}
//增加噪点
private void AddBackgroundNoisePoint(Bitmap bmp, Graphics g)
{
Random random = new Random();
using (Pen objPen = new Pen(Color.Azure, 0))
{
for (int i = 0; i < bmp.Width; i++)
{
g.DrawRectangle(objPen, random.Next(bmp.Width), random.Next(bmp.Height), 1, 1);
}
}
}
}
}
效果