验证码图像 - ASP.NET

时间:2011-10-26 17:13:03

标签: c# asp.net captcha

我正在我的网站上进行自己的Captcha检查。 一切正常,除了我需要对我的文字有一些模糊/效果,这些模糊/效果不能被网络浏览器等看到。

用于在图像上生成文本的一些代码:

Bitmap BitMap = new Bitmap(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
Graphics g = Graphics.FromImage(BitMap);
g.DrawString(""+RandomNumberString+"", new Font("Tahoma", 40), Brushes.Khaki, new PointF(1, 1));
pictureBox1.Image = BitMap;

示例:

enter image description here

我可以做些什么才能在文字上获得效果/模糊效果?

谢谢!

4 个答案:

答案 0 :(得分:2)

为什么在reCAPTCHA免费,可访问(通过音频选项,使其可用于有视觉问题的人)的同时推出自己的验证码,同时帮助数字化各种出版物?甚至有.NET implementation

修改

看看它是如何有趣的,看看“An ASP.NET Framework for Human Interactive Proofs”可能会给你一些好主意。特别是ImageHipChallenge,因为它包括图像失真代码示例。

例如:

for (int y = 0; y < height; y++)
{
    for (int x = 0; x < width; x++)
    {
        int newX = (int)(x + (distortion * Math.Sin(Math.PI * y / 64.0)));
        int newY = (int)(y + (distortion * Math.Cos(Math.PI * x / 64.0)));
        if (newX < 0 || newX >= width) newX = 0;
        if (newY < 0 || newY >= height) newY = 0;
        b.SetPixel(x, y, copy.GetPixel(newX, newY));
    }
}

将像波浪一样移动像素。比如你的例子的第二个字。

答案 1 :(得分:0)

看看这个tutorial。在那里,您将找到有关如何使用C#和DrawString方法创建CAPTCHA的代码示例。

希望,这有帮助。

答案 2 :(得分:0)

我已经使用了大约5年,并且它不涉及与可怕的第三方API的任何集成。

http://www.codeproject.com/KB/aspnet/CaptchaImage.aspx

答案 3 :(得分:0)

protected void Page_Load(object sender, EventArgs e)
{
    if(! IsPostBack)
    {
        LoadCaptcha();[![enter image description here][1]][1]
    }
    
}

public void LoadCaptcha()
{
    try
    {
        Bitmap objBitmap = new Bitmap(130, 60);
        Graphics objGraphics = Graphics.FromImage(objBitmap);
        objGraphics.Clear(Color.White);
        Random objRandom = new Random();
        objGraphics.DrawLine(Pens.Black, objRandom.Next(0, 50), objRandom.Next(10, 30), objRandom.Next(0, 200), objRandom.Next(0, 50));
        objGraphics.DrawRectangle(Pens.Blue, objRandom.Next(0, 20), objRandom.Next(0, 20), objRandom.Next(50, 80), objRandom.Next(0, 20));
        objGraphics.DrawLine(Pens.Blue, objRandom.Next(0, 20), objRandom.Next(10, 50), objRandom.Next(100, 200), objRandom.Next(0, 80));
        Brush objBrush =
            default(Brush);
        //create background style  
        HatchStyle[] aHatchStyles = new HatchStyle[]
        {
            HatchStyle.BackwardDiagonal, HatchStyle.Cross, HatchStyle.DashedDownwardDiagonal, HatchStyle.DashedHorizontal, HatchStyle.DashedUpwardDiagonal, HatchStyle.DashedVertical,
                HatchStyle.DiagonalBrick, HatchStyle.DiagonalCross, HatchStyle.Divot, HatchStyle.DottedDiamond, HatchStyle.DottedGrid, HatchStyle.ForwardDiagonal, HatchStyle.Horizontal,
                HatchStyle.HorizontalBrick, HatchStyle.LargeCheckerBoard, HatchStyle.LargeConfetti, HatchStyle.LargeGrid, HatchStyle.LightDownwardDiagonal, HatchStyle.LightHorizontal
        };
        ////create rectangular area  
        RectangleF oRectangleF = new RectangleF(0, 0, 300, 300);
        objBrush = new HatchBrush(aHatchStyles[objRandom.Next(aHatchStyles.Length - 3)], Color.FromArgb((objRandom.Next(100, 255)), (objRandom.Next(100, 255)), (objRandom.Next(100, 255))), Color.White);
        objGraphics.FillRectangle(objBrush, oRectangleF);
        //Generate the image for captcha  
        string captchaText = string.Format("{0:X}", objRandom.Next(1000000, 9999999));
        //add the captcha value in session  
        Session["CaptchaVerify"] = captchaText;
        Font objFont = new Font("Courier New", 15, FontStyle.Bold);
        //Draw the image for captcha  
        objGraphics.DrawString(captchaText, objFont, Brushes.Black, 20, 20);
        //  objBitmap.Save(HttpContext.Current.Response.OutputStream, ImageFormat.Gif);
        byte[] _bytes;
        using (MemoryStream ms = new MemoryStream())
        {
            objBitmap.Save(ms, ImageFormat.Bmp);
            _bytes = ms.ToArray();
        }
        imgcaptcha.ImageUrl = "data:image;base64," + Convert.ToBase64String(_bytes);
        ImageCapchaSubmit.ImageUrl = "data:image;base64," + Convert.ToBase64String(_bytes);
    }
    catch (Exception)
    {

    }
   
}