工具使用:

网络搜索的:
using System;

using System.Drawing;

using System.Drawing.Imaging;

using System.IO;

namespace Chapter55

{

    class DrawingHelper

    {

        // 生成验证码字符串

        private string CreateCheckCodeString()

        {

            // 定义用于验证码的字符数组

            char [] allCharArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', '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;

        }

        // 生成验证码图片

        public void CreateCheckCodeImage(string sFilePath)

        {

            // 定义图片的长度

            int iWidth = 55;

            // 定义图片的宽度

            int iHeight = 22;

            // 定义pt的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对象

            // 创建一个px*20px的图像

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

            }

            // 生成四条纵向的干扰线

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

            // 保存图片为Jpeg格式

            image.Save(sFilePath, ImageFormat.Jpeg);

            // 释放对象

            g.Dispose();

            image.Dispose();

        }

        // 生成缩略图

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

            }

        }

        // 生成黑白图像,仅支持Jpeg

        // 另:仅供学习使用,没有考虑效率问题,这种做法效率非常差

        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 = Convert.ToInt16(0.299 * color.R) + Convert.ToInt16(0.114 * color.G) + Convert.ToInt16(0.587 * color.B);

                    // 设置新的象素

                    bitmap.SetPixel(i, j, Color.FromArgb(value, value, value));                   

                }

            }

            // 存储为Jpeg图片

            bitmap.Save(sFileDstPath, ImageFormat.Jpeg);

            // 释放对象

            image.Dispose();

            bitmap.Dispose();

        }

    }

}

posted on 2008-02-18 17:38  tenero  阅读(319)  评论(1编辑  收藏  举报