给论坛“贴上”在线大头贴插件
技术与开发
不久前我在逛一个娱乐网站的时候,发现它提供了在线大头贴功能,我很喜欢这个功能,有了它就可以不用到街上拍大头贴了。我想自己的论坛拥有这个功能,不知道难度大吗?

你提的要求并不难,我们可以设计一个在线大头贴插件(插件下载地址:http://www.cpcw.com/bzsoft)。我们可以使用Flash摄像头插件(插件下载地址:http://www.cpcw.com/bzsoft)来获取用户摄像头的视频图像,然后使用JavaScript为Flash摄像头插件接口提供大头贴边框图片地址,再通过Flash摄像头插件在本地合成图像并将图像数据发送到服务器,服务器端将得到的数据通过程序处理,最后生成相应的大头贴图片。利用相同的原理,我们还可以把许多Flash功能插件,移植到论坛中。
小知识:为了让用户能有更好的网站使用体验,Flash设计者们开发了各式各样的Flash插件,Flash摄像头插件便是其中的一种。它的主要作用是通过用户的摄像头获取视频图像并将图像上传到服务器。我们将获得的图像经过ASP程序处理即可生成大头贴。
第一步 抓取视频图像
抓取视频图像我们使用Flash摄像头插件来实现。新建一个ASP文件,将准备好的Flash摄像头插件引用到该文件的<body></body>中,引用代码如下所示:
<object classid="clsid:D27CDB6E-AE
6D-11cf-96B8-444553540000" codebase=
"http://download.macromedia.com/pub/shock
wave/cabs/flash/swflash.cab#version=7,0,19
,0" width="460" height="415" id="dtt"><!——为调用插件设置的ID号——>
<param name="movie" value="dtt.swf">
<param name="quality" value="high">
<embed src="dtt.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="460" height="415"></embed>
</object>
第二步 添加大头贴边框图片
我们要在ASP文件<body></body>中添加一段JavaScript代码,作用是当用户选择了一张边框图片后,就能获取图片路径,并将路径提供给Flash摄像头插件的指定接口。相关代码如下所示:
<script language="JavaScript">
function selectpic(path){
var dttswf=document.getElementById(swfID);//获取摄像头插件对象
dttswf.changepic(path); //摄像头插件获取边框图片的接口函数,参数path为图片路径。
}
</script>
<img src="image_frame/frame_1_1.gif" id="img1" onClick="selectpic(this.src)">
第三步 将图片数据上传服务器
通过前两步,我们有了大头贴图片数据,但是由于ASP没有生成图片的类和函数,想要将图片数据生成图片,我们必须使用可以生成图片的ASP组件或者将图片数据直接写入Access数据库,然后再从数据库中读出数据流生成图片,这样就完成了插件的设计。
为了避免在服务器上安装ASP组件带来的麻烦,我们采取读写数据库的方法,新建一个ASP页面,输入相关代码用来上传图片数据和生成图片,关键代码如下所示(完整代码下载地址:http://www.cpcw.com/bzsoft):
Dim strHeadData
strHeadData=ChrB(66) & ChrB(77) '文件标识
strHeadData=strHeadData & ChrB(40) & ChrB(0) &ChrB(0) & ChrB(0) '图像描述信息块的大小
strHeadData =strHeadData &ChrB(176) & ChrB(4) & ChrB(0) & ChrB(0) '图像区数据的大小
strHeadData =strHeadData & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) '水平每米有多少像素
strHeadData =strHeadData & ChrB(0) & ChrB(0) &ChrB(0) & ChrB(0) '垂直每米有多少像素
strHeadData =strHeadData & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) '此图像所用的颜色数
strHeadData =strHeadData & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) '颜色表
strTempData =Request.Form("form名")'获取上传数据
strTempData =Split(strTempData, ",")
For intLoop2 =0 To ubound(strTempDa
ta)
strSaveData =strSaveData &To3(strTempData(intLoop2))`函数To3将接收的16进制RGB格式转换并添加到图片数据区
set rs =server.CreateObject("adodb.recordset")
sql ="select * from [img] where 1<>1"
rs.open sql,conn,1,3
rs.addnew
rs("imgdata").AppendChunk(strSaveD
ata)
rs.update
id=rs("id")
rs.close
set rs =nothing
set rs =conn.execute("select * from [img] where id ="& id)
img_size =rs("imgdata").ActualSize
saa= rs("imgdata").GetChunk(img_size)
set rs =nothing
Call SaveStream("image_photo/"& strS
aveFileName,saa)'生成图片,存放路径为当前路径image目录下
总结
这次我们制作的大头贴插件利用的是拥有视频采集功能的Flash摄像头插件,我们还可以利用其他Flash的插件给论坛设计不同的功能。例如可以用Flash绘画插件来打造论坛的在线涂鸦功能等。