首先,创建一个CLASS类,然后需要add Reference的方式添加 System.Drawing(画画的类)
方法代码如下:
/**/
///
<summary>
/// 定义显示的随机字符
/// </summary>
/// <param name="strList"></param>
/// <returns></returns>
private string imageStr( char [] strList)
{
if (strList == null )
strList = " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ " .ToCharArray();
int codeLengh = 4 ;
string radomCode = "" ;
Random r = new Random();
for ( int i = 0 ; i < codeLengh;i ++ )
{
radomCode += strList[r.Next(strList.Length)];
}
return radomCode;
}
/**/ /// <summary>
/// 创建随机验证字符的IMAGE,并保存,同时返回随机字符串
/// </summary>
/// <param name="iWidth"> 图片宽度 0时,默认为55 </param>
/// <param name="iHeight"> 图片高度 0时,默认为22 </param>
/// <param name="font"> 字符字体 null时,默认为 "Arial", 12, FontStyle.Bold </param>
/// <param name="sb"> 字符颜色 null时,默认为红 </param>
/// <param name="ImagePath"> 需要保存的文件绝对路径 </param>
/// <param name="strList"> 随即字符库 null时,默认为0-9A-Z </param>
/// <returns> 返回随机字符串 </returns>
public string createImgWithStr( int iWidth, int iHeight,Font font,SolidBrush sb , string ImagePath, char [] strList)
{
if (font == null )
font = new Font( " Arial " , 12 , FontStyle.Bold);
if (sb == null )
sb = new SolidBrush(Color.Red);
if (iWidth == 0 )
iWidth = 55 ;
if (iHeight == 0 )
iHeight = 22 ;
// 得到随机字符串
string imageString = imageStr(strList);
// 定义横向竖向都画4条线
int lineCount = 4 ;
//这2支笔用来画线条
Pen pen1 = new Pen(Color.Gold, 1 );
Pen pen2 = new Pen(Color.Black, 2 );
// 定义图片
Bitmap image = new Bitmap(iWidth, iHeight);
// 跟J2ME一样的画笔
Graphics g = Graphics.FromImage(image);
// 先画背景色 当然你可以自定义下
g.Clear(ColorTranslator.FromHtml( " #F0F0F0 " ));
// 确定写字的落点
Rectangle rect = new Rectangle( 5 , 2 , iWidth, iHeight);
Random r = new Random();
// 默认随机画横向竖向4条线
for ( int i = 0 ;i < lineCount;i ++ )
{
Point p1 = new Point( 0 , r.Next(iHeight));
Point p2 = new Point(iWidth, r.Next(iHeight));
Point p3 = new Point(r.Next(iWidth), 0 );
Point p4 = new Point(r.Next(iWidth), iHeight);
g.DrawLine(pen1, p1, p2);
g.DrawLine(pen2, p3, p4);
}
// 写字
g.DrawString(imageString, font, sb, rect);
// 删除源文件
if (File.Exists(ImagePath))
File.Delete(ImagePath);
// 保存文件,我定义为jpeg格式
image.Save(ImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
// 释放资源
g.Dispose();
image.Dispose();
return imageString;
}
/// 定义显示的随机字符
/// </summary>
/// <param name="strList"></param>
/// <returns></returns>
private string imageStr( char [] strList)
{
if (strList == null )
strList = " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ " .ToCharArray();
int codeLengh = 4 ;
string radomCode = "" ;
Random r = new Random();
for ( int i = 0 ; i < codeLengh;i ++ )
{
radomCode += strList[r.Next(strList.Length)];
}
return radomCode;
}
/**/ /// <summary>
/// 创建随机验证字符的IMAGE,并保存,同时返回随机字符串
/// </summary>
/// <param name="iWidth"> 图片宽度 0时,默认为55 </param>
/// <param name="iHeight"> 图片高度 0时,默认为22 </param>
/// <param name="font"> 字符字体 null时,默认为 "Arial", 12, FontStyle.Bold </param>
/// <param name="sb"> 字符颜色 null时,默认为红 </param>
/// <param name="ImagePath"> 需要保存的文件绝对路径 </param>
/// <param name="strList"> 随即字符库 null时,默认为0-9A-Z </param>
/// <returns> 返回随机字符串 </returns>
public string createImgWithStr( int iWidth, int iHeight,Font font,SolidBrush sb , string ImagePath, char [] strList)
{
if (font == null )
font = new Font( " Arial " , 12 , FontStyle.Bold);
if (sb == null )
sb = new SolidBrush(Color.Red);
if (iWidth == 0 )
iWidth = 55 ;
if (iHeight == 0 )
iHeight = 22 ;
// 得到随机字符串
string imageString = imageStr(strList);
// 定义横向竖向都画4条线
int lineCount = 4 ;
//这2支笔用来画线条
Pen pen1 = new Pen(Color.Gold, 1 );
Pen pen2 = new Pen(Color.Black, 2 );
// 定义图片
Bitmap image = new Bitmap(iWidth, iHeight);
// 跟J2ME一样的画笔
Graphics g = Graphics.FromImage(image);
// 先画背景色 当然你可以自定义下
g.Clear(ColorTranslator.FromHtml( " #F0F0F0 " ));
// 确定写字的落点
Rectangle rect = new Rectangle( 5 , 2 , iWidth, iHeight);
Random r = new Random();
// 默认随机画横向竖向4条线
for ( int i = 0 ;i < lineCount;i ++ )
{
Point p1 = new Point( 0 , r.Next(iHeight));
Point p2 = new Point(iWidth, r.Next(iHeight));
Point p3 = new Point(r.Next(iWidth), 0 );
Point p4 = new Point(r.Next(iWidth), iHeight);
g.DrawLine(pen1, p1, p2);
g.DrawLine(pen2, p3, p4);
}
// 写字
g.DrawString(imageString, font, sb, rect);
// 删除源文件
if (File.Exists(ImagePath))
File.Delete(ImagePath);
// 保存文件,我定义为jpeg格式
image.Save(ImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
// 释放资源
g.Dispose();
image.Dispose();
return imageString;
}
另外,我在实际运用过程中总是发现重新生成了图片,但是显示却还是以前那张,最后在网上找到了答案:原本的<asp:Image ID="Image1" runat="server" ImageUrl="~/a.jpg" />改成<asp:Image ID="Image1" runat="server" ImageUrl="~/a.jpg?temp=<%= DateTime.Now.Ticks%>" />就能够自动更新了……另外代码段中的<%= DateTime.Now.Ticks%> 不能改成<%=DateTime.Now.Ticks%> 少了一个空格就挂了,谁能告诉我为什么呢??