我的ASP之旅—无组件生成缩略图_第1页
我的ASP之旅—无组件生成缩略图_第2页
我的ASP之旅—无组件生成缩略图_第3页
我的ASP之旅—无组件生成缩略图_第4页
我的ASP之旅—无组件生成缩略图_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、我的ASP之旅无组件生成缩略图    网上有不少生成缩略图的ASP组件。若你的虚拟空间不支持注册新组件,可能会感觉自己的网站失色不少。心晴不才,结合网上资源写了个无组件生成缩略图程序,仅供参考。        还是先看看基础部分吧。首先,我们知道在页面中显示图片是如下代码:       <img src="pic.gif" border="0" width="300" height

2、="260">      src是图片路径,border控制图片边缘宽度,width是图片的长度,height是图片的高度。缩略图的生成其实就是在原始尺寸上缩放。但一般为了尽量少失真,我们都会按比例缩放。于是,获取图片的长宽尺寸也就成了生成缩略图的重点。下面便是编写无组件生成缩略图的步骤:1.无组件获取图片大小       以前刚学ASP不久时看到过一篇利用ASCII码实现无组件获取图片尺寸的文章。后来试了试,发现在获取jpg类图片尺寸时总是不能正确显示,在网

3、上查了查,居然有不少网站转载这个程序,但没有一家指出此程序的缺陷,也就更谈不上解决缺陷的办法了。后来又google了一下,终于找到了一篇介绍利用ADODB.stream获取图片尺寸的文章,按其介绍的方法,修改里面的代码试了试,效果真的还不错,现在将其拿出来与大家分享:利用ADODB.stream获取图片尺寸的通用类<%'/ GPS:Get Picture Size /'/利用ADODB.stream获取图片尺寸/'/Cited By Leon(心晴) 2005年8月11日/Class GPSDim asoPrivate Sub Class_InitializeSe

4、t aso=CreateObject("Adodb.Stream")aso.Mode=3 aso.Type=1 aso.Open End SubPrivate Sub Class_Terminateset aso=nothingEnd SubPrivate Function Bin2Str(Bin)Dim I, StrFor I=1 to LenB(Bin)clow=MidB(Bin,I,1)if AscB(clow)<128 thenStr = Str & Chr(ASCB(clow)ElseI=I+1if I <= LenB(Bin) then St

5、r = Str & Chr(ASCW(MidB(Bin,I,1)&clow)end IfNext Bin2Str = StrEnd FunctionPrivate Function Num2Str(num,base,lens)'GPS (2005-8-11)dim retret = ""while(num>=base)ret = (num mod base) & retnum = (num - num mod base)/basewendNum2Str = right(string(lens,"0") & n

6、um & ret,lens)End FunctionPrivate Function Str2Num(str,base)'GPS (2005-8-11)dim retret = 0for i=1 to len(str)ret = ret *base + cint(mid(str,i,1)nextStr2Num=retEnd FunctionPrivate Function BinVal(bin)'GPS (2002-8-11)dim retret = 0for i = lenb(bin) to 1 step -1ret = ret *256 + ascb(midb(bi

7、n,i,1)nextBinVal=retEnd FunctionPrivate Function BinVal2(bin)'GPS (2002-8-11)dim retret = 0for i = 1 to lenb(bin)ret = ret *256 + ascb(midb(bin,i,1)nextBinVal2=retEnd Function'/以下是调用代码/Function getImageSize(filespec) 'GPS (2002-8-11)dim ret(3)aso.LoadFromFile(filespec)bFlag=aso.read(3)se

8、lect case hex(binVal(bFlag)case "4E5089":aso.read(15)ret(0)="PNG"ret(1)=BinVal2(aso.read(2)aso.read(2)ret(2)=BinVal2(aso.read(2)case "464947":aso.read(3)ret(0)="GIF"ret(1)=BinVal(aso.read(2)ret(2)=BinVal(aso.read(2)case "535746":aso.read(5)binData=as

9、o.Read(1)sConv=Num2Str(ascb(binData),2 ,8)nBits=Str2Num(left(sConv,5),2)sConv=mid(sConv,6)while(len(sConv)<nBits*4)binData=aso.Read(1)sConv=sConv&Num2Str(ascb(binData),2 ,8)wendret(0)="SWF"ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2)/20)

10、ret(2)=int(abs(Str2Num(mid(sConv,3*nBits+1,nBits),2)-Str2Num(mid(sConv,2*nBits+1,nBits),2)/20)case "FFD8FF":do do: p1=binVal(aso.Read(1): loop while p1=255 and not aso.EOSif p1>191 and p1<196 then exit do else aso.read(binval2(aso.Read(2)-2)do:p1=binVal(aso.Read(1):loop while p1<2

11、55 and not aso.EOSloop while trueaso.Read(3)ret(0)="JPG"ret(2)=binval2(aso.Read(2)ret(1)=binval2(aso.Read(2)case else:if left(Bin2Str(bFlag),2)="BM" thenaso.Read(15)ret(0)="BMP"ret(1)=binval(aso.Read(4)ret(2)=binval(aso.Read(4)elseret(0)=""end ifend selectret(

12、3)="width=""" & ret(1) &""" height=""" & ret(2) &""""getimagesize=retEnd FunctionEnd Class%>将以上代码复制生成GPS.asp文件,这样无组件获取图片尺寸的通用类就OK了。2.获取图片路径     由于不只一张图片,以及图片需分类存放,我们在数据库中设计了一个存放图片相对路径的字段

13、ImgURL。我们把上传的图片都放在一个名为images的文件夹中(至于如何无组件上传图片心晴就不在多说了)。现在我们先设计一个ShowImg.asp页面用来显示缩略图及相关信息。具体设计如下: 图片: 图片格式: 图片尺寸: 图片大小: 点击次数:下面,我们获取图片的绝对路径。代码如下:<%  '/获取ShowImg.asp的绝对路径/ Dim curFile curFile=Server.mappath(Request.servervariables("PATH_INFO&qu

14、ot;)   Dim curfilename,filename '/图片相对路径(存于数据库中) cufilename=rs("ImgURL") '/因为ShowImg.asp与images在同一目录,所以我们用instrrev获取images的路径/ filename=left(curFile,instrrev(curFile,"")&cufilename     '/建立GPS类实体/ Di

15、m GetPicSize Set GetPicSize=new GPS  Set fs=Server.CreateObject("Scripting.FileSystemObject") '/获取图片类型/ Dim PicSuffixName PicSuffixName=fs.GetExtensionName(filename)  Dim PD '/Picture Dimension Dim PWidth,PHeight  Select Case P

16、icSuffixName Case "gif","bmp","jpg","png": '/调用GPS通用类中的GetImageSize函数获取图片尺寸/ PD=GetPicSize.GetImageSize(filename) PWidth=PD(1)   '/获取图片宽度 PHeight=PD(2)  '/获取图片高度 Case "swf" PD=GetPicSize.G

17、etImageSize(filename) PWidth=PD(1)  '/获取Flash宽度 PHeight=PD(2) '/获取Flash高度 Case Else End Select  Set fs=Nothing Set GetPicSize=Nothing %>     将上面的代码复制到<body>的上面就OK了!     当然,有人会说,获取路径不一定要用PATH_INFO,直接

18、用server.mappath()不就可以了嘛,呵呵,萝卜青菜各有所爱,主要是我用PATH_INFO可以实现FSO的一些功能而用server.mappath()没有搞定,所以一直使用这个。3.定义缩略图尺寸   这部分代码就是仁者见仁,智者见智了。首先,我们需要规定缩略图显示尺寸范围,譬如:300X260,代码可以这样写:<% Dim PXWidth,PXHeight Dim Pp '/Proportion If PWidth=0 Or PWidth="" Then PXWidth=0 PX

19、Height=0 Else Pp=FormatNumber(PWidth/PHeight,2) '/长宽比 End If If PWidth>=PHeight Then If PWidth>=300 Then PXWidth=300 PXHeight=FormatNumber(300/Pp,0) Else PXWidth=PWidth PXHeight=PHeight End If Else If PHeight>=260 Then PXHeight=260 PXWi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论