.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();

 

posted on 2013-05-18 19:45  KwanChiLeung  阅读(676)  评论(1编辑  收藏  举报