ASP.NET 生成图片水印、验证码文字的字体

         在ASP.NET生成图片时中常使用到生成水印文字,生成验证码文字等,这些图片上的文字有时候我们需要设置更好看的字体,实现的方法一般是调用服务器 C:/windows/fonts/ 目录下的字体,对于服务器中没有的字体就需要我们在服务器上面安装,显然不是很方便。另外一中方法是:把字体库文件放在我们的项目中,生成图片中的文字时调用项目的字体库。但是,这种方法使用具有局限性,对于WEB页面的字体就无能为力了。关于WEB页面调用自定义的字体,详见上面的《一、让用户使用我设计的网页字体》 。

a.      下载字体文件,并加入到项目中,例如:有一个项目的登录验证码功能用到的字体是“Andy”字体,这里就需要下载Andy的字体库,“andyb.ttf”。

b.      把字体库加入到项目中,例如:加入到根目录下的“Share/Fonts/”下面。

c.      在生成验证码的后台文件中,创建的字体,这里创建一个方法来生成一个自定义的字体。

/// <summary>
/// 创建一个定义的字体,这个字体是程序级别创建的
/// </summary>
/// <returns>返回:字体,这里为Andy字体</returns>
private Font CreateFamily()
{
    PrivateFontCollection pfc = new PrivateFontCollection();
    //string fontpath = HttpRuntime.AppDomainAppPath + "Share/Fonts/andyb.ttf";    //这种方法也能获取到项目的绝对路径,所以还要加上文件的相对路径
    string fontpath = System.Web.HttpContext.Current.Server.MapPath("~/Share/Fonts/andyb.ttf");  //获取字体路径
    //pfc.AddFontFile(@"C:/windows/fonts/andyb.ttf");  //这种方法是获取服务器中的字体,不过需要服务器字体库中存在改字体文件
    pfc.AddFontFile(fontpath);           
    //添加到字体
    Font font = new System.Drawing.Font(pfc.Families[0], 20, System.Drawing.FontStyle.Bold);    //创建一个自定义的字体
    return font;
}

关键三个地方:

1.PrivateFontCollection 类命名空间在 System.Drawing.Text 下面这个方面提供一个创建字体库的数组对象,

2.需要通过绝对路径获取字体库的路径这里提供两种方法:

Application.StartupPath+"Share/Fonts/andyb.ttf"

System.Web.HttpContext.Current.Server.MapPath("~/Share/Fonts/andyb.ttf")

3.创建一个Font字体

注意:这种方法也可以获取C:/windows/fonts/ 目录下面的字体,前提是字体存在的情况下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是ASP.NET验证码源代码: ASPX页面: ```html <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Captcha.aspx.cs" Inherits="Captcha" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Image ID="imgCaptcha" runat="server" /> <br /> <asp:TextBox ID="txtCaptcha" runat="server"></asp:TextBox> <asp:Button ID="btnCheck" runat="server" Text="Check" OnClick="btnCheck_Click" /> </div> </form> </body> </html> ``` ASPX.CS页面: ```csharp using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Web.UI; public partial class Captcha : Page { private string GenerateRandomCode(int length) { const string chars = "ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz123456789"; var random = new Random(); var result = new char[length]; for (var i = 0; i < length; i++) { result[i] = chars[random.Next(chars.Length)]; } return new string(result); } protected void Page_Load(object sender, EventArgs e) { var randomCode = GenerateRandomCode(6); Session["Captcha"] = randomCode; using (var bitmap = new Bitmap(100, 30)) { using (var graphics = Graphics.FromImage(bitmap)) { graphics.Clear(Color.White); graphics.SmoothingMode = SmoothingMode.AntiAlias; graphics.DrawString(randomCode, new Font("Arial", 16), Brushes.Black, new Point(10, 0)); Response.ContentType = "image/png"; bitmap.Save(Response.OutputStream, ImageFormat.Png); } } } protected void btnCheck_Click(object sender, EventArgs e) { if (txtCaptcha.Text.Equals(Session["Captcha"])) { Response.Write("Correct!"); } else { Response.Write("Incorrect!"); } } } ``` 这个代码生成一个6位随机验证码,并将其存储在会话中。然后使用Graphics类在ASP.NET页面上绘制验证码图像,并将其发送回客户端。用户输入他们看到的验证码并单击“检查”按钮, ASP.NET代码将会检查用户输入是否与会话中存储的验证码匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值