• [置顶] 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;

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

  • 相关阅读:
    vim 常用指令总结
    冥想、反思
    FM(Factorization Machines)模型详解
    机器学习性能指标(ROC、AUC、召回率)
    数据库常用操作(mysql)
    shell命令总结
    Window Function--the function of window function
    Python用Pillow(PIL)进行简单的图像操作
    Pyecharts : plot Graph, Line, Liquid, Parallel
    机器学习方法--分类、回归、聚类
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3230787.html
Copyright © 2020-2023  润新知