通过Adodb.Stream取得图像(BMP JPG PNG GIF SWF)的高度和宽度

基本原理使用adodb.stream读二进制文件然后进行解析,然后返回一数组
第一个元素为类型(bmp jpg png gif swf)
第二个元素为宽度{width}
第三个元素为高度{height}
第四个元素为width={width},height={height}式字符串
  1. <%
  2. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  3. '上传图片或显示SWF的时候都希望得到它的高度和宽度   
  4. '----------------------------------------------
  5. '基本原理使用Adodb.Stream读二进制文件然后进行解析,然后返回一数组   
  6. '第一个元素为类型(BMP   JPG   PNG   GIF   SWF)   
  7. '第二个元素为宽度{width}   
  8. '第三个元素为高度{height}   
  9. '第四个元素为width={width},height={height}式字符串   
  10. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  11. Class qswhImg 
  12. dim aso 
  13. Private Sub Class_Initialize 
  14. set aso=CreateObject("Adodb.Stream"
  15. aso.Mode=3   
  16. aso.Type=1   
  17. aso.Open   
  18. End Sub 
  19. Private Sub Class_Terminate 
  20. set aso=nothing 
  21. End Sub 
  22. Private Function Bin2Str(Bin) 
  23. Dim I, Str 
  24. For I=1 to LenB(Bin) 
  25.     clow=MidB(Bin,I,1) 
  26.     if ASCB(clow)<128 then 
  27.     Str = Str & Chr(ASCB(clow)) 
  28.     else 
  29.     I=I+1 
  30.     if I <= LenB(Bin) then Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow)) 
  31.     end if 
  32. Next   
  33. Bin2Str = Str 
  34. End Function 
  35. Private Function Num2Str(num,base,lens) 
  36. dim ret 
  37. ret = "" 
  38. while(num>=base) 
  39.     ret = (num mod base) & ret 
  40.     num = (num - num mod base)/base 
  41. wend 
  42. Num2Str = right(string(lens,"0") & num & ret,lens) 
  43. End Function 
  44. Private Function Str2Num(str,base) 
  45. dim ret 
  46. ret = 0 
  47. for i=1 to len(str) 
  48.     ret = ret *base + cint(mid(str,i,1)) 
  49. next 
  50. Str2Num=ret 
  51. End Function 
  52. Private Function BinVal(bin) 
  53. dim ret 
  54. ret = 0 
  55. for i = lenb(bin) to 1 step -1 
  56.     ret = ret *256 + ascb(midb(bin,i,1)) 
  57. next 
  58. BinVal=ret 
  59. End Function 
  60. Private Function BinVal2(bin) 
  61. dim ret 
  62. ret = 0 
  63. for i = 1 to lenb(bin) 
  64. ret = ret *256 + ascb(midb(bin,i,1)) 
  65. next 
  66. BinVal2=ret 
  67. End Function 
  68. Function getImageSize(filespec)   
  69. dim ret(3) 
  70. aso.LoadFromFile(filespec) 
  71. bFlag=aso.read(3) 
  72. select case hex(binVal(bFlag)) 
  73. case "4E5089"
  74.     aso.read(15) 
  75.     ret(0)="PNG" 
  76.     ret(1)=BinVal2(aso.read(2)) 
  77.     aso.read(2) 
  78.     ret(2)=BinVal2(aso.read(2)) 
  79. case "464947"
  80.     aso.read(3) 
  81.     ret(0)="GIF" 
  82.     ret(1)=BinVal(aso.read(2)) 
  83.     ret(2)=BinVal(aso.read(2)) 
  84. case "535746"
  85.     aso.read(5) 
  86.     binData=aso.Read(1) 
  87.     sConv=Num2Str(ascb(binData),2 ,8) 
  88.     nBits=Str2Num(left(sConv,5),2) 
  89.     sConv=mid(sConv,6) 
  90.     while(len(sConv)<nBits*4) 
  91.     binData=aso.Read(1) 
  92.     sConv=sConv&Num2Str(ascb(binData),2 ,8) 
  93.     wend 
  94.     ret(0)="SWF" 
  95.     ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2))/20) 
  96.     ret(2)=int(abs(Str2Num(mid(sConv,3*nBits+1,nBits),2)-Str2Num(mid(sConv,2*nBits+1,nBits),2))/20) 
  97. case "FFD8FF"
  98.     do   
  99.     do: p1=binVal(aso.Read(1)): loop while p1=255 and not aso.EOS 
  100.     if p1>191 and p1<196 then exit do else aso.read(binval2(aso.Read(2))-2) 
  101.     do:p1=binVal(aso.Read(1)):loop while p1<255 and not aso.EOS 
  102.     loop while true 
  103.     aso.Read(3) 
  104.     ret(0)="JPG" 
  105.     ret(2)=binval2(aso.Read(2)) 
  106.     ret(1)=binval2(aso.Read(2)) 
  107. case else: 
  108.     if left(Bin2Str(bFlag),2)="BM" then 
  109.     aso.Read(15) 
  110.     ret(0)="BMP" 
  111.     ret(1)=binval(aso.Read(4)) 
  112.     ret(2)=binval(aso.Read(4)) 
  113.     else 
  114.     ret(0)="" 
  115.     end if 
  116. end select 
  117. ret(3)="width=""" & ret(1) """ height=""" & ret(2) """" 
  118. getimagesize=ret 
  119. End Function 
  120. End Class
  121. '使用范例(读某目录下所有图片的宽度): 
  122. set qswh=new qswhImg 
  123. Set fso = CreateObject("Scripting.FileSystemObject")
  124. 'Set f = fso.GetFolder(server.mappath("/update/pic_tem/")) 
  125. 'Set fc = f.Files 
  126. 'For Each f1 in fc 
  127. 'ext=fso.GetExtensionName(f1.path) 
  128. 'select case ext 
  129. 'case "gif","bmp","jpg","png": 
  130. ' arr=qswh.getImageSize(f1.path) 
  131. ' response.write "<br>" & arr(0) & " " & arr(3) & ":" & f1.name & " width:" & arr(1) & " height:" & arr(2) 
  132. 'case "swf" 
  133. ' arr=qswh.getimagesize(f1.path) 
  134. ' response.write "<br>" & arr(0) & " " & arr(3) & ":" & f1.name & " width:" & arr(1) & " height:" & arr(2) 
  135. 'end select 
  136. 'Next
  137. response.write("<HR>")
  138. show_picWH=qswh.getImageSize(server.mappath("/update/pic_tem/200852414295626.jpg"))
  139. response.write("图片路径:"&server.mappath("/update/pic_tem/200852414295626.jpg")"<BR>图片格式:" & show_picWH(0) & "<BR>图片宽度:" & show_picWH(1) & "<BR>图片高度:" & show_picWH(2))
  140. Set fc=nothing 
  141. Set f=nothing 
  142. Set fso=nothing 
  143. Set qswh=nothing 
  144. %>
  145. ============================================================================
  146. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  147. '函数名:RETURN_QSWHIMG_STR
  148. '函数作用:
  149. '    配合Class qswhImg 把一张图片按比例缩小到一个值
  150. '    如果图片的尺寸小于设定值,图片则按原尺寸,不作处理
  151. '说明:
  152. '    URL 图片的地址
  153. '    WH 图片的尺寸范围
  154. '    返回 图片的 width=__ or height=__ 字符串
  155. '    调用实例:<img src="url/image.jpg" <%=call RETURN_QSWHIMG_STR("url/image.jpg",200)%> border="0">
  156. '日期:2008-06
  157. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  158. function RETURN_QSWHIMG_STR(URL,WH)
  159. on error resume next
  160. if URL="" or isnull(URL) or WH="" then exit function
  161. set qswh=new qswhImg 
  162. Set fso = CreateObject("Scripting.FileSystemObject")
  163. show_picWH=qswh.getImageSize(server.mappath("/"&URL))
  164. if cint(show_picWH(1))>=cint(show_picWH(2)) and cint(show_picWH(1))>WH then
  165.    if show_picWH(1)>WH then show_picWH_str=" width="
  166. elseif cint(show_picWH(1))<cint(show_picWH(2)) and cint(show_picWH(2))>WH then
  167.    if show_picWH(2)>WH then show_picWH_str=" height="
  168. else
  169.    show_picWH_str=""
  170. end if
  171. set fso=nothing
  172. set qswh=nothing
  173. RETURN_QSWHIMG_STR=show_picWH_str
  174. end function
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值