BBS多变个性贴图的实现,用ASP.NET网页动态生成图片

原创 2004年06月24日 16:35:00

作者:阿赖 (Email: A at Lai.com.cn 主页:http://www.9499.net Blog: http://blog.csdn.net/laily/ )

关键字:Asp.NET贴图程序 VB.NET编程

摘要:使用ASP.NET动态生成用于BBS贴图的动态图片。即ASPX页面通过改变querrystring参数的输出不同图片的示例程序。

某日在论坛上看到别人发言用的是搞笑的图片,发言的文字就在图片中,看了一下图片的地址原来是动态生成的,可以通过改地址中的一些参数就可以生成另外的图片,显示不同的文字。如这个地址:

http://gzx.zcat.net/isay.ashx?fontsize=24&index=02&what=HelloWorld

将显示下面的图片:

动态生成的图片

现在你试着修改一下fontsize、index、what这些参数的值看看,这样的图片用在论坛中贴图挺用趣的吧:)

这个动态生成图片的程序是如何实现的呢?经过一番研究,我发现使用.NET提供的强大的绘图功能实现这样的程序真是小菜一碟(a piece of cake)。

STEP:

建个ASP.NET WEB项目,将一些模板的图片(如果你象我这样懒,不想自己做图片那就直接用上面的吧,what参数为空,index分别等于1,2……,生成的图片保存下来就行了)文件名为1.jpg,2.jpg,3.jpg……,存在template目录下。

建个WEB FORM,页面上不必添加任何东东,Page_onload事件中写如下代码就搞定了:

        Dim Size, Index, sColor, sFont, say As String
        Request.ContentEncoding
= System.Text.Encoding.Unicode
        Size
= Request.QueryString("Size")
        Index
= Request.QueryString("index")
        sColor
= Request.QueryString("color")
        sFont
= Request.QueryString("font")
        say
= Request.QueryString("say")
        Response.Clear()
        Response.ContentType
= "image/jpeg"
        Response.Charset = "gb-2312"
        If say = "" Then
            Size
= 8
            Index
= 999
            say
= "地址后加参数:?index=&say=&font=&color=&size="
            say &= "index:1-9  say:显示的文字 font:字体 color:颜色(如:red) size:文字大小"
        End If
       
If Size = "" Or Not Microsoft.VisualBasic.IsNumeric(Size) Then Size = 12
       
If Index = "" Then Index = "1"
        Dim oFont As Font
       
Try
            ofont
= New Font(sFont, Single.Parse(Size))
       
Catch
            oFont
= New Font(FontFamily.GenericSerif, 12)
       
End Try
       
Dim strFilePath As String = Server.MapPath("template" & Index & ".jpg")
       
If Not IO.File.Exists(strFilePath) Then
            Index
= "1"
            strFilePath = Server.MapPath("template" & Index & ".jpg")
       
End If
       
Dim oBmp As Bitmap
       
If IO.File.Exists(strFilePath) Then
            oBmp
= New Bitmap(strFilePath)
       
Else
            oBmp
= New Bitmap(200, 100, PixelFormat.Format24bppRgb)
       
End If
       
Dim fColor, defColor As Brush
        defColor
= Brushes.Black
       
Dim x As Single = 10
       
Dim y As Single = 10
       
Dim w As Single = 50
       
Dim h As Single = 50
       
Select Case Index
           
Case "1"
                defColor = Brushes.White
                w
= 280 : h = 70
           
Case "2"
                defColor = Brushes.Red
                x
= 0 : y = 0
                w
= 175 : h = 80
           
Case "3"
                defColor = Brushes.Blue
                x
= 15 : y = 310
                w
= 530 : h = 115
           
Case "4"
                defColor = Brushes.Black
                x
= 155 : y = 5
                w
= 435 : h = 140
           
Case "5"
                defColor = Brushes.Red
                x
= 5 : y = 140
                w
= 305 : h = 90
           
Case "6"
                defColor = Brushes.Beige
                x
= 155 : y = 5
                w
= 435 : h = 140
           
Case "7"
                defColor = Brushes.Gray
                x
= 0 : y = 0
                w
= 175 : h = 80
           
Case "8"
                defColor = Brushes.Black
                x
= 155 : y = 5
                w
= 435 : h = 140
           
Case "9"
                defColor = Brushes.DarkBlue
                x
= 155 : y = 5
                w
= 435 : h = 140
       
End Select
       
Select Case LCase(sColor)
           
Case "white" : fColor = Brushes.White
           
Case "black" : fColor = Brushes.Black
           
Case "red" : fColor = Brushes.Red
           
Case "yellow" : fColor = Brushes.Yellow
           
Case "green" : fColor = Brushes.Green
           
Case "gray" : fColor = Brushes.Gray
           
Case "blue" : fColor = Brushes.Blue
           
Case "brown" : fColor = Brushes.Brown
           
Case "coral" : fColor = Brushes.Coral
           
Case "darkblue" : fColor = Brushes.DarkBlue
           
Case "gold" : fColor = Brushes.Gold
           
Case "orange" : fColor = Brushes.Orange
           
Case Else : fColor = defColor
       
End Select

       
Dim oGrap As Graphics = Graphics.FromImage(oBmp)
        oGrap.DrawString(say, oFont, fColor,
New RectangleF(x, y, w, h), StringFormat.GenericTypographic)
oBmp.Save(Response.OutputStream, ImageFormat.Jpeg)

        oGrap.Dispose()
        oBmp.Dispose()
        Response.
End()

使用方法跟前面提到了差不多,增加了字体和颜色两个参数,用法是:

程序页面地址?index=&say=&font=&color=&size="

注意x,y,w,h是图片文字框的位置和大小,请根据相应的图片作相应的设置。其实更好的办法是,将这图片的相关参数放到Web.config中,将会使程序更灵活和方便布署。

asp.net 实现输入网址生成当前网页的图片

效果: 添加两个类: using System; using System.Collections.Generic; using System.Text; using System.Drawin...
  • zhifeiya
  • zhifeiya
  • 2016年05月16日 23:15
  • 2008

[C#]对我的网页动态生成图片方法的修改

     我以前介绍了一种网页动态生成图片方法,在实践中发现这种方法不好,用于单机版的应用程序还可以,但用于c/s模式的话每一次用户请求都要重新生成一次图片,重新读写一次磁盘。   看了最新文摘中介绍...
  • kenter78
  • kenter78
  • 2005年03月10日 09:47
  • 1608

生成动态验证图片

Java真是太强大了。。 动态生成验证码图片:package cn.itcast.commons; import java.awt.BasicStroke; import java.awt.Col...
  • wojiaohuangyu
  • wojiaohuangyu
  • 2015年07月31日 08:28
  • 662

ASP.NET中动态的生成一个图片

HTML>    HEAD>        每10秒自动刷新-->        meta http-equiv="refresh" content="5">    HEAD>    body>   ...
  • W_Andy
  • W_Andy
  • 2007年11月27日 13:57
  • 907

asp.net bbs源码分析

asp.ne bbst源码分析  1.登陆页面  1.登陆页面 登陆页面中需要注意的大致上就是两条:如何实现验证码?如何防止sql注入。 1.如何实现验证码? 验证码简单的实现可以通过在服务器端生成一...
  • xuqianghit
  • xuqianghit
  • 2010年12月16日 18:55
  • 1372

asp.net网页生成图片

using System;using System.Collections;using System.Web;using System.IO;using System.Drawing;using Sy...
  • cxzhq2002
  • cxzhq2002
  • 2007年07月02日 15:04
  • 1208

动态生成PNG格式的图片直接嵌在ASP.NET网页中

 前几天接到一个需求,要为某个产生单据的网页里增加单据流水号的条码。生成条码的算法是现成的,只要把条码图片展示在流水号文字之下就行。 本想用jQuery的ajax调用ashx返回二进制流,...
  • ki1381
  • ki1381
  • 2014年06月29日 20:40
  • 3098

asp.net 截屏 截取web页面 源代码

asp.net 截屏 截取web页面                                                   using System.Drawing; ...
  • GoodShot
  • GoodShot
  • 2013年02月22日 11:38
  • 1309

ASP.NET实现动态页面标题

在ASP中,我们可以用:TITLE>        Response.Write("我把标题给改了!")%> TITLE>的方式来实现动态的改变页面标题,因为ASP的程序代码可以与HTML代码可以交错...
  • gzAaron
  • gzAaron
  • 2005年10月12日 16:16
  • 977

在网络后台动态生成图片,项目使用到 转载之

利用ASP.NET一般处理程序动态生成Web图像 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口,可以响应HTTP请求。我们可以用一般处理程序来动态生成Web图像。 ...
  • ljxh401
  • ljxh401
  • 2017年12月29日 10:51
  • 99
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BBS多变个性贴图的实现,用ASP.NET网页动态生成图片
举报原因:
原因补充:

(最多只允许输入30个字)