Все замечали при регистрации или создании сообщения на форумах или обычных сайтах, везде присутствует картинка с искаженным текстом, которую обычно долго рассматриваешь, пытаясь понять, что там написано. Имя ей 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);
}
Запустите проект и проверьте работу созданного проекта. Примеры работы проекта смотрите ниже. Ссылка для скачивания примера: Яндекс.Диск




Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!