c#字体的设置问题 20

请问怎样才能得到如下图的效果那?还有一种形式的如下图:我知道这是验证,我想知道怎样生成这样的验证码。其他的验证码原理就不要给我看了。这幅图中的d、7是怎么生成的?怎么完成... 请问怎样才能得到如下图的效果那?

还有一种形式的如下图:
我知道这是验证,我想知道怎样生成这样的验证码。其他的验证码原理就不要给我看了。

这幅图中的d、7是怎么生成的?怎么完成中空效果的?
展开
 我来答
zhuhaoxuanzhu
2014-05-04 · TA获得超过555个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:320万
展开全部

写一个ashx用于生成图片

<%@ WebHandler Language="C#" Class="ValidateCode" %>
using System;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
public class ValidateCode : IHttpHandler, IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
        string randomcode = this.CreateRandomCode(4);
        context.Session["ValidateCode"] = randomcode;
        this.CreateImage(randomcode, context);
    }
    ///  <summary>   
    ///  生成随机码   
    ///  </summary>   
    ///  <param  name="length">随机码个数</param>   
    ///  <returns></returns>   
    private string CreateRandomCode(int length)
    {
        int rand;
        char code;
        string randomcode = String.Empty;
        //生成一定长度的验证码   
        System.Random random = new Random();
        for (int i = 0; i < length; i++)
        {
            rand = random.Next();
            if (rand % 3 == 0)
            {
                code = (char)('A' + (char)(rand % 26));
            }
            else
            {
                code = (char)('0' + (char)(rand % 10));
            }
            randomcode += code.ToString();
        }
        return randomcode;
    }
    ///  <summary>   
    ///  创建随机码图片   
    ///  </summary>   
    ///  <param  name="randomcode">随机码</param>   
    private void CreateImage(string randomcode, HttpContext context)
    {
        int randAngle = 45; //随机转动角度   
        int mapwidth = (int)(randomcode.Length * 26);
        Bitmap map = new Bitmap(mapwidth, 32);//创建图片背景   
        Graphics graph = Graphics.FromImage(map);
        graph.Clear(Color.AliceBlue);//清除画面,填充背景   
        graph.DrawRectangle(new Pen(Color.LightGray, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框   
        //graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式   
        Random rand = new Random();
        //背景噪点生成   
        Pen blackPen = new Pen(Color.LightGray, 0);
        for (int i = 0; i < 50; i++)
        {
            int x = rand.Next(0, map.Width);
            int y = rand.Next(0, map.Height);
            graph.DrawRectangle(blackPen, x, y, 1, 1);
        }
        //验证码旋转,防止机器识别   
        char[] chars = randomcode.ToCharArray();//拆散字符串成单字符数组   
        //文字距中   
        StringFormat format = new StringFormat(StringFormatFlags.NoClip);
        format.Alignment = StringAlignment.Center;
        format.LineAlignment = StringAlignment.Center;
        //定义字体   
        string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "Buxton Sketch", "Colonna MT", "Jokerman", "Ravie" }; //你问题中的那4个图片也是字体,但可能不是系统自带的字体
        for (int i = 0; i < chars.Length; i++)
        {
            int findex = rand.Next(6);
            Font f = new System.Drawing.Font(font[findex], 17, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)   
            Brush b = new System.Drawing.SolidBrush(Color.Blue);
            Point dot = new Point(rand.Next(8, 24), 16);
            //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的   
            float angle = rand.Next(-randAngle, randAngle);//转动的度数   
            graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置   
            graph.RotateTransform(angle);
            graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);
            //graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format);   
            graph.RotateTransform(-angle);//转回去   
            graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置   
        }
        //graph.DrawString(randomcode,fontstyle,new SolidBrush(Color.Blue),2,2); //标准随机码   
        //生成图片   
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        System.Drawing.Image.FromStream(ms);
        context.Response.ClearContent();
        context.Response.ContentType = "image/gif";
        context.Response.BinaryWrite(ms.ToArray());
        graph.Dispose();
        map.Dispose();
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

这段代码已经可以生成验证码了,你还可以根据需求修改代码,比如修改字体集合,修改大小。

追问
我知道怎样生成验证码,我想知道怎样生成我图片上的验证码。
追答
根据图片并不能准确地知道是什么字体。中空并不是效果,而是一种字体,比如华文彩云。
touchfell9ef13ab
2014-05-04 · TA获得超过163个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:100万
展开全部

思路:

  1. 随机函数(),返回值是验证码的字符串t5xu

  2. 利用绘图函数,按给定的字符串画出图片

  3. 增加验证码机器人识别难度,随机在图片上面画一些点点,或者横竖的直线或则曲线干扰识别

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1c6e06f
2014-05-04 · TA获得超过2894个赞
知道小有建树答主
回答量:695
采纳率:66%
帮助的人:658万
展开全部
系统自带的字体(比如宋体,黑体什么的)一般没有这些特殊效果,特殊效果的字体库需要自己下载,推荐一个叫做“1001freefonts”的英文网站,有很多特殊效果的字体供,下载,下载后,绘制字体时,Font对象要用你下载的字体进行构造。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianguang_sky
2014-05-04
知道答主
回答量:12
采纳率:0%
帮助的人:8.1万
展开全部
做这类验证码, 通过安装字体可行性不高, 无法做到不同环境下兼容;
最好是自己设计出各个字的图片, 然后通过生成的验证码文字调用对应图片,将图片以水印方式打到原图上输出
追问
恩,有道理,能不能说说怎样生成对应的图片啊。
追答
  1. 先将a-z,0-9等作出对应的效果图片(可同名.png格式) 

  2. 将图片部署于应用程序制定目录便于调用

  3. 生成随机数验证码,并根据验证码找到相应图片以打水印的方式在一个画布上画图,可根据.png图片的宽高设定个验证码字符对应的图片间距, 然后输出新生成的验证码图片到页面中

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1006038080
2014-05-04 · TA获得超过102个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:176万
展开全部
这个是验证码,生成的图片。不是字体设置的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式