namespace DrawTest
{
class DrawHelper
{
//生成验证字符串
private string CreateCheckCodeString()
{
//定义用于验证符的字符数组
char[] allCharArray = {'0','1','2','3','4','5','6','7','8','9','A','S','C','D','E','F','G',
'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
//定义验证字符串
string randomCode = "";
Random rand = new Random();
for (int i = 0; i < 4; i++)
{
randomCode +=allCharArray[rand.Next (allCharArray.Length)];
}
return randomCode;
}
/// <summary>
/// 生成验证图片
/// </summary>
/// <param name="sFilePath">图片的存储地址</param>
private void CreateCheckCodeImage(string sFilePath)
{
// 定义图片的宽度
int iWidth = 55;
// 定义图片的高度
int iHeight = 22;
// 定义字体
Font font = new Font("Arial", 12, FontStyle.Bold);
// 定义黑色的画笔,用于绘制文字
SolidBrush brush = new SolidBrush(Color .Black);
// 定义钢笔,绘制干扰线
Pen pen1 = new Pen(Color .Gray,0);
Pen pen2 = new Pen(Color .FromArgb(255,100,100,100),0);//根据argb获取颜色
//创建一个55px*22px的图像
Bitmap image = new Bitmap(iWidth ,iHeight );
//从图像上获取一个会图面
Graphics g = Graphics.FromImage(image);
// 清楚整个绘图画面并以指定颜色填充
g.Clear(ColorTranslator .FromHtml("#F0F0F0"));//从HTML中获取颜色对象
//定义文字的绘制矩形区域
RectangleF rect = new RectangleF(5,2,iWidth ,iHeight );
//绘制干扰线
Random rand = new Random();//定义随即对象绘制干扰线
//两条横向干扰线
for (int i = 0; i < 2; i++)
{
//定义起点
Point p1 = new Point(0,rand.Next (iHeight));
//定义终点
Point p2 = new Point(iWidth ,rand .Next (iHeight));
//绘制直线
g.DrawLine(pen1,p1,p2);
}
//生成4条纵向的干扰线
for (int i = 0; i < 4; i++)
{
//定义起点
Point p1 = new Point(rand.Next (iWidth ),0);
//定义终点
Point p2 = new Point(rand.Next (iWidth ),iHeight);
//绘制直线
g.DrawLine(pen2, p1, p2);
}
//绘制文字
g.DrawString(CreateCheckCodeString(),font ,brush,rect);
try
{
//保存为jpeg格式
image.Save(sFilePath, ImageFormat.Jpeg);
}
catch {
}
//释放对象
g.Dispose();
image.Dispose();
}
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="sFileSrcPath">源文件图像地址</param>
/// <param name="sFileDstPath">目标图像地址</param>
/// <param name="iSizeLimit">指定的大小</param>
public void CreateThumbnailImage(string sFileSrcPath, string sFileDstPath, int iSizeLimit)
{
//检测原图片是否存在
if (File.Exists(sFileSrcPath))
{
//获取原图片图像
Image image = Image.FromFile(sFileSrcPath);
//定义大小结构
SizeF size = new SizeF(image .Width ,image .Height );
//计算出符合要求的大小
while (size.Width > iSizeLimit || size.Height > iSizeLimit)
{
size.Height /= 1.1F;
size.Width /= 1.1F;
}
//创建缩略图像
Bitmap bitmap = new Bitmap(Convert.ToInt16(size.Width), Convert.ToInt16(size.Height));
//创建绘画面
Graphics g = Graphics.FromImage(bitmap );
//清楚颜色,用透明色填充
g.Clear(Color .Transparent);
//定义源图像的矩形区域
Rectangle srcrect = new Rectangle(0,0,image.Width ,image .Height );
//定义缩略图的矩形区域
Rectangle Dstrect = new Rectangle(0,0,bitmap .Width ,bitmap .Height );
//绘制图
g.DrawImage(image,Dstrect ,srcrect ,GraphicsUnit.Pixel);
//存储为jpeg格式的图片
bitmap.Save(sFileDstPath,ImageFormat.Jpeg);
//释放对象
g.Dispose();
image.Dispose();
bitmap.Dispose();
}
}
/// <summary>
/// 生成黑白图像,仅支持jpeg格式,效率很差
/// </summary>
/// <param name="sFileSrcPath">源文件</param>
/// <param name="sFileDstPath">目标文件</param>
public void CreateBlackAndWhiteImage(string sFileSrcPath, string sFileDstPath)
{
//获取源图片图像
Bitmap image = (Bitmap)Image.FromFile(sFileSrcPath);
//源图像的大小
int iWidth = image.Width;
int IHeight = image.Height;
//创建黑白图像
Bitmap bitmap = new Bitmap(iWidth, IHeight);
//定义临时变量
Color color;
int value;
//遍历所有像素
for (int i = 0; i < iWidth; i++)
{
for (int j = 0; j < IHeight; j++)
{
//从源图像中得到当前像素的color对象
color = image.GetPixel(i,j);
//计算新的RGB值
value=(int)(0.299*color.R+0.14*color .G+0.587*color .B);
//设置新的像素
bitmap.SetPixel(i,j,Color.FromArgb(value,value,value));
}
}
//存储为jpeg格式的图片
bitmap.Save(sFileDstPath,ImageFormat.Jpeg);
//释放对象
image.Dispose();
bitmap.Dispose();
}
/// <summary>
/// 测试
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
DrawHelper p = new DrawHelper();
p.CreateCheckCodeImage(@"D:/Test/CheckCode.jpg");
p.CreateThumbnailImage(@"D:/Test/Test.jpg",@"D:/Test/Test_Small.jpg",100);
p.CreateBlackAndWhiteImage(@"D:/Test/Test.jpg", @"D:/Test/Test_BlackAndWhite.jpg");
}
}
}
//