c#字体的设置问题 20
请问怎样才能得到如下图的效果那?还有一种形式的如下图:我知道这是验证,我想知道怎样生成这样的验证码。其他的验证码原理就不要给我看了。这幅图中的d、7是怎么生成的?怎么完成...
请问怎样才能得到如下图的效果那?
还有一种形式的如下图:
我知道这是验证,我想知道怎样生成这样的验证码。其他的验证码原理就不要给我看了。
这幅图中的d、7是怎么生成的?怎么完成中空效果的? 展开
还有一种形式的如下图:
我知道这是验证,我想知道怎样生成这样的验证码。其他的验证码原理就不要给我看了。
这幅图中的d、7是怎么生成的?怎么完成中空效果的? 展开
展开全部
写一个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;
}
}
}
这段代码已经可以生成验证码了,你还可以根据需求修改代码,比如修改字体集合,修改大小。
追问
我知道怎样生成验证码,我想知道怎样生成我图片上的验证码。
追答
根据图片并不能准确地知道是什么字体。中空并不是效果,而是一种字体,比如华文彩云。
展开全部
思路:
随机函数(),返回值是验证码的字符串t5xu
利用绘图函数,按给定的字符串画出图片
增加验证码机器人识别难度,随机在图片上面画一些点点,或者横竖的直线或则曲线干扰识别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
系统自带的字体(比如宋体,黑体什么的)一般没有这些特殊效果,特殊效果的字体库需要自己下载,推荐一个叫做“1001freefonts”的英文网站,有很多特殊效果的字体供,下载,下载后,绘制字体时,Font对象要用你下载的字体进行构造。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做这类验证码, 通过安装字体可行性不高, 无法做到不同环境下兼容;
最好是自己设计出各个字的图片, 然后通过生成的验证码文字调用对应图片,将图片以水印方式打到原图上输出
最好是自己设计出各个字的图片, 然后通过生成的验证码文字调用对应图片,将图片以水印方式打到原图上输出
追问
恩,有道理,能不能说说怎样生成对应的图片啊。
追答
先将a-z,0-9等作出对应的效果图片(可同名.png格式)
将图片部署于应用程序制定目录便于调用
生成随机数验证码,并根据验证码找到相应图片以打水印的方式在一个画布上画图,可根据.png图片的宽高设定个验证码字符对应的图片间距, 然后输出新生成的验证码图片到页面中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是验证码,生成的图片。不是字体设置的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询