'///以下是调用代码/// Function getImageSize(filespec) 'GPS (2002-8-11) dim ret(3) aso.LoadFromFile(filespec) bFlag=aso.read(3) select 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=aso.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) wend ret(0)="SWF" ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2))/20) 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.EOS if 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<255 and not aso.EOS loop while true aso.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" then aso.Read(15) ret(0)="BMP" ret(1)=binval(aso.Read(4)) ret(2)=binval(aso.Read(4)) else ret(0)="" end if end select ret(3)="width=""" & ret(1) &""" height=""" & ret(2) &"""" getimagesize=ret End Function End Class %> 将以上代码复制生成GPS.asp文件,这样无组件获取图片尺寸的通用类就OK了。
2.获取图片路径 由于不只一张图片,以及图片需分类存放,我们在数据库中设计了一个存放图片相对路径的字段ImgURL。我们把上传的图片都放在一个名为images的文件夹中(至于如何无组件上传图片心晴就不在多说了)。现在我们先设计一个ShowImg.asp页面用来显示缩略图及相关信息。具体设计如下: 图片,图片格式,图片尺寸,图片大小,点击次数。 下面,我们获取图片的绝对路径。代码如下: <% '/////获取ShowImg.asp的绝对路径///// Dim curFile curFile=Server.mappath(Request.servervariables("PATH_INFO")) Dim curfilename,filename
'/////图片相对路径(存于数据库中) cufilename=rs("ImgURL")
'/////因为ShowImg.asp与images在同一目录,所以我们用instrrev获取images的路径///// filename=left(curFile,instrrev(curFile,"\"))&cufilename
'/////建立GPS类实体///// Dim 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 PicSuffixName Case "gif","bmp","jpg","png":
'/////调用GPS通用类中的GetImageSize函数获取图片尺寸///// PD=GetPicSize.GetImageSize(filename) PWidth=PD(1) '//获取图片宽度 PHeight=PD(2) '//获取图片高度 Case "swf" PD=GetPicSize.GetImageSize(filename) PWidth=PD(1) '//获取Flash宽度 PHeight=PD(2) '//获取Flash高度 Case Else End Select Set fs=Nothing Set GetPicSize=Nothing %> 将上面的代码复制到<body>的上面就OK了! 当然,有人会说,获取路径不一定要用PATH_INFO,直接用server.mappath()不就可以了嘛,呵呵,萝卜青菜各有所爱,主要是我用PATH_INFO可以实现FSO的一些功能而用server.mappath()没有搞定,所以一直使用这个。 3.定义缩略图尺寸 这部分代码就是仁者见仁,智者见智了。首先,我们需要规定缩略图显示尺寸范围,譬如:300X260,代码可以这样写: <% Dim PXWidth,PXHeight Dim Pp '//Proportion If PWidth=0 Or PWidth="" Then PXWidth=0 PXHeight=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 PXWidth=FormatNumber(260*Pp,0) Else PXWidth=PWidth PXHeight=PHeight End If End If %> 将上面的代码紧接第二步写下即可。调用时代码如下: <img src=<%=curfilename%> border="0" width=<%=PXWidth%> height=<%=PXHeight%>> 至于图片格式可以用得到,图片尺寸可以写成 <% response.write PXWidth&"X"&PXHeight %> 图片大小可以用FSO.GetFileSize(filename)来实现,而点击次数可以简单地用SQL语句实现,具体编码就不再累述了。 这样,一个无组件生成缩略图程序就写好了。
|