基本原理使用adodb.stream读二进制文件然后进行解析,然后返回一数组
第一个元素为类型(bmp jpg png gif swf)
第二个元素为宽度{width}
第三个元素为高度{height}
第四个元素为width={width},height={height}式字符串
第一个元素为类型(bmp jpg png gif swf)
第二个元素为宽度{width}
第三个元素为高度{height}
第四个元素为width={width},height={height}式字符串
- <%
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- '上传图片或显示SWF的时候都希望得到它的高度和宽度
- '----------------------------------------------
- '基本原理使用Adodb.Stream读二进制文件然后进行解析,然后返回一数组
- '第一个元素为类型(BMP JPG PNG GIF SWF)
- '第二个元素为宽度{width}
- '第三个元素为高度{height}
- '第四个元素为width={width},height={height}式字符串
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Class qswhImg
- 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)
- 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)
- 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)
- 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)
- 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)
- 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
- '使用范例(读某目录下所有图片的宽度):
- set qswh=new qswhImg
- Set fso = CreateObject("Scripting.FileSystemObject")
- 'Set f = fso.GetFolder(server.mappath("/update/pic_tem/"))
- 'Set fc = f.Files
- 'For Each f1 in fc
- 'ext=fso.GetExtensionName(f1.path)
- 'select case ext
- 'case "gif","bmp","jpg","png":
- ' arr=qswh.getImageSize(f1.path)
- ' response.write "<br>" & arr(0) & " " & arr(3) & ":" & f1.name & " width:" & arr(1) & " height:" & arr(2)
- 'case "swf"
- ' arr=qswh.getimagesize(f1.path)
- ' response.write "<br>" & arr(0) & " " & arr(3) & ":" & f1.name & " width:" & arr(1) & " height:" & arr(2)
- 'end select
- 'Next
- response.write("<HR>")
- show_picWH=qswh.getImageSize(server.mappath("/update/pic_tem/200852414295626.jpg"))
- response.write("图片路径:"&server.mappath("/update/pic_tem/200852414295626.jpg")"<BR>图片格式:" & show_picWH(0) & "<BR>图片宽度:" & show_picWH(1) & "<BR>图片高度:" & show_picWH(2))
- Set fc=nothing
- Set f=nothing
- Set fso=nothing
- Set qswh=nothing
- %>
- ============================================================================
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- '函数名:RETURN_QSWHIMG_STR
- '函数作用:
- ' 配合Class qswhImg 把一张图片按比例缩小到一个值
- ' 如果图片的尺寸小于设定值,图片则按原尺寸,不作处理
- '说明:
- ' URL 图片的地址
- ' WH 图片的尺寸范围
- ' 返回 图片的 width=__ or height=__ 字符串
- ' 调用实例:<img src="url/image.jpg" <%=call RETURN_QSWHIMG_STR("url/image.jpg",200)%> border="0">
- '日期:2008-06
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- function RETURN_QSWHIMG_STR(URL,WH)
- on error resume next
- if URL="" or isnull(URL) or WH="" then exit function
- set qswh=new qswhImg
- Set fso = CreateObject("Scripting.FileSystemObject")
- show_picWH=qswh.getImageSize(server.mappath("/"&URL))
- if cint(show_picWH(1))>=cint(show_picWH(2)) and cint(show_picWH(1))>WH then
- if show_picWH(1)>WH then show_picWH_str=" width="
- elseif cint(show_picWH(1))<cint(show_picWH(2)) and cint(show_picWH(2))>WH then
- if show_picWH(2)>WH then show_picWH_str=" height="
- else
- show_picWH_str=""
- end if
- set fso=nothing
- set qswh=nothing
- RETURN_QSWHIMG_STR=show_picWH_str
- end function