.net 笔记摘自《ASP.NET 2.0 第一步》,感谢原作者的指导。
个人理解均在注释中,欢迎多提意见哈,共勉。
正文
1.生成验证码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace ConsoleApplication4 { class DrawingHelper { private string CreateCheckCodeString() { //定义用于验证码的字符数组 char[] allCharArray = { '0', '1', '2', '3', '4', '5', '6', '7', 'a', 'b', 'c', 'd', 'e', 'f' }; //定义验证码字符串 string randomCode = ""; Random rand = new Random(); //生成4位验证码字符串 for (int i = 0; i < 4; i++) randomCode += allCharArray[rand.Next(allCharArray.Length)]; return randomCode; } //生成验证码图片 public void CreateCheckCodeImage(string sFilePath) { //定义图片的宽度 int iWidth = 55; //定义图片的高度 int iHeight = 22; //定义大小为12pt的Arial字体,用于绘制文字 Font font = new Font("Arial", 12, FontStyle.Bold); //定义黑色的单色画笔,用于绘制文字 SolidBrush brush = new SolidBrush(Color.Black); //定义钢笔,用于绘制干扰线 Pen pen1 = new Pen(Color.Gray, 0);//注意这里直接获得了一个现有的Color对象 Pen pen2 = new Pen(Color.FromArgb(255, 100, 100, 100), 0);//注意这里根据ARGB值获得了一个Color对象 //创建一个55*22px的图像 Bitmap image = new Bitmap(iWidth, iHeight); //从图像获取一个绘图面 Graphics g = Graphics.FromImage(image); //清楚整个绘图画面并以指定颜色填充 g.Clear(ColorTranslator.FromHtml("#f0f0f0"));//注意这里从HTML颜色代码获得了Color对象 //定义文字的绘制矩形区域 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 < 2; 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); //保存图片为JPEG格式 image.Save(sFilePath, ImageFormat.Jpeg); //释放对象 g.Dispose(); image.Dispose(); } } class Program { static void Main(string[] args) { //测试代码: DrawingHelper dh = new DrawingHelper(); dh.CreateCheckCodeImage(@"D:\C#\CheckCode.jpg"); } } }
2.生成缩略图:
//生成缩略图 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(); } } //测试代码2: dh.CreateThumbnailImage(@"D:\C#\CheckCode.jpg",@"D:\C#\Check_small.jpg",200);
3.从远程地址下载文件的例子
class NetworkHelper { //缓冲区大小 private int iBufferSize = 10240; //从远程HTTP地址下载文件到本地 public void DownloadFile(string sFileUrl, string sFileSavePath) { //建立HTTP请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sFileUrl); //获取HTTP响应 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //获取HTTP响应流 Stream stream = response.GetResponseStream(); //创建文件获取文件流 FileStream fs = File.Create(sFileSavePath); //创建缓冲区 byte[] buffer = new byte[iBufferSize]; //从HTTP响应流中循环读取字节写入文件流 int readCount = 0; while ((readCount = stream.Read(buffer, 0, iBufferSize)) > 0) fs.Write(buffer, 0, readCount); //释放资源 fs.Close(); stream.Close(); } } //测试代码: NetworkHelper nh=new NetworkHelper (); nh.DownloadFile ("www.XXX.com/test.rar",@"D:\Test\test.rar");
4.另一个有关文件下载的例子
//Response.Clear();用于清除缓冲区,如果不这么做,页面中的HTML文本也会被认为是文件的一部分一起输出 Response.Clear(); //Response.ContentType这个属性是用来设置输出流的类型,服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为"text/html"类型。 Response.ContentType = "application/octet=stream"; //Response.AddHeader这个方法用于输出一些描述信息,比如文件名,文件是下载还是直接打开。在这里,attachment表示下载,如果改为inline就是直接打开了,前提是客户端安装了相应文件的处理程序。 //HttpUtility.UrlEncode()用来格式化文件名编码方式,确保文件名是中文的时候不会出现乱码。 Response.AddHeader("Content-Disposition", "attachment;FileName=" + HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8)); //Response.WriteFile用于输出文件,但是由于系统会把文件的所有内容一起装入WEB服务器的内存中,如果文件过大就会出现服务器内存不够的错误。对于下载大文件可以参考微软的KnowledgeBase Response.WriteFile(strFilePhysicalPath); //Response.End方法最后把缓冲区所有内容向客户端输出,结束页面执行。 Response.End();