ASP.NET 生成动态文字图片 (防采集防复制)

时间:2015/12/3 16:33:00来源:互联网 作者:flyso 点击: 944 次

这是个非常有用的功能,这个功能可以将网站的关键文字信息写出图片,不然别人采集。
功能页面的代码如下:
这个页面负责接受参数生成图片,注意再这个时候这个页面本身就是一个图片了,调用他就像调用image那样,调用方法在最下面

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.IO;
/// <summary>
/// 本页面只作为一个图片被调用
/// </summary>
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        SetFontImage(Request.QueryString["familyName"], Convert.ToInt32(Request.QueryString["fontSize"]), Request.QueryString["targetString"]);
    }
    /// <summary>
    /// 生成文字图片
    /// </summary>
    /// <param name="familyName">字体</param>
    /// <param name="fontSize">字号</param>
    /// <param name="targetString">生成内容</param>
    public void SetFontImage(string familyName,int fontSize,string targetString)
    {
        //创建位图对象
        Bitmap objBitmap = null;
        //创建绘图图面对象
        Graphics g = null;
        //创建并初始化字体对象
        Font stringFont = new Font(familyName, fontSize, FontStyle.Bold);
        //文本布局对象
        StringFormat stringFormat = new StringFormat();
        //设置文本格式
        stringFormat.FormatFlags = StringFormatFlags.NoWrap;
        //绘图过程
        try
        {
            //实例化位图对象
            objBitmap = new Bitmap(1, 1);
            //实例化绘图图面对象,将位图对象放入图面中
            g = Graphics.FromImage(objBitmap);
            //获取欲绘制文字图片的高宽
            SizeF stringSize = g.MeasureString(targetString, stringFont);
            int nWidth = (int)stringSize.Width;
            int nHeight = (int)stringSize.Height;
            //获取高宽后释放无用的图面对象资源和位图对象资源
            g.Dispose();
            objBitmap.Dispose();
            //根据已获得的高宽实例化新的位图对象
            objBitmap = new Bitmap(nWidth, nHeight);
            //根据新的位图对象实例化新的绘图图面对象
            g = Graphics.FromImage(objBitmap);
            //填充图片,可以指定背景颜色,开始坐标和图片高宽,指定文本呈现样式
            g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, nWidth, nHeight));
            g.TextRenderingHint = TextRenderingHint.AntiAlias;
            //开始绘制
            g.DrawString(targetString, stringFont, new SolidBrush(Color.Black), new PointF(0, 0), stringFormat);
            //生成图片
            objBitmap.Save(Response.OutputStream, ImageFormat.Gif);
            
        }
        catch (Exception ee)
        {
            Response.Write(ee.ToString());
        }
        finally
        {
            if (null != g) g.Dispose();
            if (null != objBitmap) objBitmap.Dispose();
            Response.End();
        }
    }
}


调用方法:
在其他的页面中|
< td style="width: 16px">
                    <img src="Default.aspx?familyName=宋体&fontSize=12&targetString=我做的生成文字图片通用类" id="img1" runat="server"/>asdfasdfad</td>
就是吧那个生成图片的页面当做图片一样调用,传入他要的参数就可以了  


Copyright © 2005 - 2016 flyso.cn. 飞搜 版权所有 鄂ICP备11002783号-3