zoukankan      html  css  js  c++  java
  • [置顶] c# 验证码生成

    今儿有一个任务是输出一串字符,要求用GDI画出于是:

                Bitmap bm = new Bitmap(200, 200);
                Graphics g = Graphics.FromImage(bm);
                g.Clear(Color.Transparent);//画背景色
                g.DrawString("asdwqeqr", new Font("宋体", 14), new SolidBrush(Color.Blue), 20, 10);//Graphics 自带函数,画字符串以特定字体
                pictureBox1.Image = bm;//把画出的图像放在一个PictureBox中

    于是想到,平时输入的验证码是不是也可以通过此画出?尝试如下

                string checkCode = "asdwqeqr";
                int iwidth = (int)(checkCode.Length * 13);//确定图像大小,13是因为字体大小为10,留一些余量,可根据具体情况调整
                System.Drawing.Bitmap bm= new System.Drawing.Bitmap(iwidth, 23);
                Graphics g = Graphics.FromImage(bm);
                g.Clear(Color.White);
                //定义颜色
                Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
                //定义字体 
                string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
                Random rand = new Random();
                //随机输出噪点
                for (int i = 0; i < 50; i++)
                {
                    int x = rand.Next(image.Width);
                    int y = rand.Next(image.Height);
                    g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);//这儿也可以改变以获得多种颜色
                }
                //输出不同字体和颜色的验证码字符
                for (int i = 0; i < checkCode.Length; i++)
                {
                    int cindex = rand.Next(7);
                    int findex = rand.Next(5);


                    Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
                    Brush b = new System.Drawing.SolidBrush(c[cindex]);
                    int ii = 4;
                    if ((i + 1) % 2 == 0)
                    {
                        ii = 2;
                    }
                    g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);
                }
                //画一个边框
                g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
                pictureBox1.Image = bm;

    当然了,没有验证码的倾斜,如果哪位朋友有补充的,欢迎交流~

  • 相关阅读:
    51Nod-1006【LCS】+【输出路径】模板题
    POJ 2250 Compromise【LCS】+输出路径
    洛谷 P1387 最大正方形 【dp】(经典)
    【hdu】4521 小明序列【LIS变种】【间隔至少为d】
    HDU 1025 城市供应 【LIS】
    hdu 2191 悼念512汶川大地震遇难同胞 【多重背包】(模板题)
    HDU 2159 FATE【二维完全背包】
    POJ 1384 Piggy-Bank【完全背包】+【恰好完全装满】(可达性DP)
    洛谷 P1474 货币系统 Money Systems(经典)【完全背包】+【恰好装满的最大方案数量】
    洛谷 P1057 传球游戏 【dp】(经典)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3230787.html
Copyright © 2011-2022 走看看