【问题标题】:Working with System.Drawing in .net to create a Captcha在 .net 中使用 System.Drawing 创建验证码
【发布时间】:2015-10-27 19:38:19
【问题描述】:

我在 c# 中生成了 6 位字母数字文本,现在我需要将其显示为图像。为此,我在 .Net 中使用 BitmapGraphics

因此,我能够获取图像,但我需要对图像的字体进行一些小的更改,就像我们在 Captcha Challenge zigzag 中看到的那样,让它有点难以阅读。

这是我的代码...

Bitmap bmp = new Bitmap(100, 30);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Navy);
string randomString = CaptchaImageResult.GetCaptchaString(6);
g.DrawString(randomString, new Font("Courier", 16), 
             new SolidBrush(Color.WhiteSmoke), 2, 2);
HttpResponse response = System.Web.HttpContext.Current.Response;
response.ContentType = "image/jpeg";
bmp.Save(response.OutputStream, ImageFormat.Jpeg);
bmp.Dispose();
new CaptchaChallenge { Captcha = bmp };

更新..

我试过这个代码,但字母不清楚..

 Brush zigzagBrush = new System.Drawing.Drawing2D.HatchBrush(
                         System.Drawing.Drawing2D.HatchStyle.ZigZag, Color.White);
 g.DrawString(randomString, new Font("Courier", 16), zigzagBrush, 2, 2);

【问题讨论】:

  • 不确定实际问题是什么。所以你得到了图像,但它很容易阅读,是吗?然后你应该 1) 一个字母一个字母地写 2) 改变字体/大小并包括一些平移和旋转 3) 添加一些线条等 - 不过用 GDI+ 扭曲绘图有点困难..
  • 试着让画笔更透明
  • 使用 HatchBrush 是个好主意!尝试用不同的颜色和阴影图案写相同的 2-3 次,可能使用半透明的画笔和位置的微小偏移。验证码始终是一个反复试验的游戏,要找到合适的平衡点。..
  • 有多种方法可以扭曲图像 - 我怀疑您只需在字体上添加 HatchStyle 就可以获得不错的结果(对机器来说很难,对人类来说很容易)。

标签: c# .net image drawing captcha


【解决方案1】:

阴影刷覆盖会更好:

Bitmap bmp = new Bitmap(100, 30);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Navy);
g.DrawString(code, new Font("Courier", 16),
                     new SolidBrush(Color.WhiteSmoke), 2, 2);
g.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.FromArgb(255,0,0,0),Color.Transparent), g.ClipBounds );
g.FillRectangle(new HatchBrush(HatchStyle.ForwardDiagonal, Color.FromArgb(255, 0, 0, 0), Color.Transparent), g.ClipBounds);

【讨论】:

  • 好,我还需要能够绘制锯齿形文字
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 2021-09-19
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2012-06-09
相关资源
最近更新 更多