首先,我們知道在頁面中顯示圖片是如下代碼:
<img src=pic.gif border=0 width=300 height=260>
src是圖片路徑,border控製圖片邊緣寬度,width是圖片的長度,height是圖片的高度。縮略圖的生成其實就是在原始尺寸上縮放。但一般為了盡量少失真,我們都會按比例縮放。於是,獲取圖片的長寬尺寸也就成了生成縮略圖的重點。
下面便是編寫無組件生成縮略圖的步驟:
1.無組件獲取圖片大小
以前剛學ASP不久時看到過一篇利用ASCII碼實現無組件獲取圖片尺寸的文章。後來試了試,發現在獲取jpg類圖片尺寸時總是不能正確顯示,在網上查了查,居然有不少網站轉載這個程序,但沒有一家指出此程序的缺陷,也就更談不上解決缺陷的辦法了。後來又google了一下,終於找到了一篇介紹利用ADODB.stream獲取圖片尺寸的文章,按其介紹的方法,修改裡面的代碼試了試,效果真的還不錯,現在將其拿出來與大家分享:
利用ADODB.stream獲取圖片尺寸的通用類
| 以下是代碼片段: <% '//////////// GPS:Get Picture Size ////////////// '//////////////利用ADODB.stream獲取圖片尺寸////////////// '/////////Cited By Leon(心晴) 2005年8月11日////////// Class GPS Dim aso Private Sub Class_Initialize Set aso=CreateObject(Adodb.Stream) aso.Mode=3 aso.Type=1 aso.Open End Sub Private Sub Class_Terminate set aso=nothing End Sub Private Function Bin2Str(Bin) Dim I, Str For I=1 to LenB(Bin) clow=MidB(Bin,I,1) if AscB(clow)<128 then Str = Str & Chr(ASCB(clow)) Else I=I 1 if I <= LenB(Bin) then Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow)) end If Next Bin2Str = Str End Function Private Function Num2Str(num,base,lens) 'GPS (2005-8-11) dim ret ret = while(num>=base) ret = (num mod base) & ret num = (num - num mod base)/base wend Num2Str = right(string(lens,0) & num & ret,lens) End Function Private Function Str2Num(str,base) 'GPS (2005-8-11) dim ret ret = 0 for i=1 to len(str) ret = ret *base cint(mid(str,i,1)) next Str2Num=ret End Function Private Function BinVal(bin) 'GPS (2002-8-11) dim ret ret = 0 for i = lenb(bin) to 1 step -1 ret = ret *256 ascb(midb(bin,i,1)) next BinVal=ret End Function Private Function BinVal2(bin) 'GPS (2002-8-11) dim ret ret = 0 for i = 1 to lenb(bin) ret = ret *256 ascb(midb(bin,i,1)) next BinVal2=ret End Function '///以下是調用代碼/// 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.現在我們先設計一個ShowImg.asp頁面用來顯示縮略圖及相關信息。具體設計如下:
圖片:
圖片格式: