The following MakeCaptchaImage2 method creates a Bitmap containing a CAPTCHA image.
private Random Rand = new Random(); // Draw the words with letters overlapping each other. private Bitmap MakeCaptchaImage2(string txt, int wid, int hgt, Font the_font, Brush the_brush) { Bitmap bm = new Bitmap(wid, hgt); using (Graphics gr = Graphics.FromImage(bm)) { gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; int x = 0; foreach (char ch in txt.ToCharArray()) { SizeF ch_size = gr.MeasureString(ch.ToString(), the_font); int y = (int)(Rand.NextDouble() * (hgt - ch_size.Height)); gr.DrawString(ch.ToString(), the_font, the_brush, x, y); x += (int)(ch_size.Width * 0.35); } } return bm; }
The method creates a Bitmap of the desired size. For each character, it measures the character as it will be drawn, picks a random Y coordinate for the character, and draws it. The code then increments the next character’s X position by 0.35 times the character’s width so the two characters will overlap horizontally.



