Все замечали при регистрации или создании сообщения на форумах или обычных сайтах, везде присутствует картинка с искаженным текстом, которую обычно долго рассматриваешь, пытаясь понять, что там написано. Имя ей CAPTCHA. CAPTCHA от англ. Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей. В интернете часто транскрибируется как «капча». Термин появился в 2000 году. Основная идея теста: предложить пользователю такую задачу, которую с лёгкостью может решить человек, но которую несоизмеримо сложнее решить компьютеру. В данном посте мы рассмотрим создание изображения с помехами или Капчу.
Создайте проект Windows Form и добавьте три компонента на форму:
Создайте проект Windows Form и добавьте три компонента на форму:
- pictureBox1 - будет отвечать за прорисовку капчи. Свойство: Size = 169; 63;
- textBox1 -нужен для ввода пользователем ответа
- button1 - кнопка для генерации новой капчи. Свойство: Text = Обновить;
- button2 - кнопка проверки введенных данных Свойство: Text = OK;
- После добавления компонентов ваша форма примет приведенный ниже вид:
private Bitmap CreateImage(int Width, int Height) { Random rnd = new Random(); //Создадим изображение Bitmap result = new Bitmap(Width, Height); //Вычислим позицию текста int Xpos = 10; int Ypos = 10; //Добавим различные цвета ддя текста Brush[] colors = { Brushes.Black, Brushes.Red, Brushes.RoyalBlue, Brushes.Green, Brushes.Yellow, Brushes.White, Brushes.Tomato, Brushes.Sienna, Brushes.Pink }; //Добавим различные цвета линий Pen[] colorpens = { Pens.Black, Pens.Red, Pens.RoyalBlue, Pens.Green, Pens.Yellow, Pens.White, Pens.Tomato, Pens.Sienna, Pens.Pink }; //Делаем случайный стиль текста FontStyle[] fontstyle = { FontStyle.Bold, FontStyle.Italic, FontStyle.Regular, FontStyle.Strikeout, FontStyle.Underline}; //Добавим различные углы поворота текста Int16[] rotate = {1,-1,2,-2,3,-3,4,-4,5,-5,6,-6}; //Укажем где рисовать Graphics g = Graphics.FromImage((Image)result); //Пусть фон картинки будет серым g.Clear(Color.Gray); //Делаем случайный угол поворота текста g.RotateTransform(rnd.Next(rotate.Length)); //Генерируем текст text = String.Empty; string ALF = "1234567890QWERTYUIOPASDFGHJKLZXCVBNM"; for (int i = 0; i < 5; ++i) text += ALF[rnd.Next(ALF.Length)]; //Нарисуем сгенирируемый текст g.DrawString(text, new Font("Arial", 25, fontstyle[rnd.Next(fontstyle.Length)]), colors[rnd.Next(colors.Length)], new PointF(Xpos, Ypos)); //Добавим немного помех //Линии из углов g.DrawLine(colorpens[rnd.Next(colorpens.Length)], new Point(0, 0), new Point(Width - 1, Height - 1)); g.DrawLine(colorpens[rnd.Next(colorpens.Length)], new Point(0, Height - 1), new Point(Width - 1, 0)); //Белые точки for (int i = 0; i < Width; ++i) for (int j = 0; j < Height; ++j) if (rnd.Next() % 20 == 0) result.SetPixel(i, j, Color.White); return result; }В событие Click кнопки button1 добавим метод для генерации новой капчи:
private void button1_Click(object sender, EventArgs e) { pictureBox1.Image = this.CreateImage(pictureBox1.Width, pictureBox1.Height); }В событие Click кнопки button2 добавим метод выполняющий проверку введенного текста и сгенерированного:
private void button2_Click(object sender, EventArgs e) { if (textBox1.Text == this.text) MessageBox.Show("Верно!"); else MessageBox.Show("Ошибка!"); }В событие Form1_Load, запуск которого происходит при загрузке проекта, так же добавим генерацию капчи.
private void Form1_Load(object sender, EventArgs e) { pictureBox1.Image = this.CreateImage(pictureBox1.Width, pictureBox1.Height); }Запустите проект и проверьте работу созданного проекта. Примеры работы проекта смотрите ниже.
Ссылка для скачивания примера: Яндекс.Диск
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!