odb.Stream 对象 读取图片长度和宽度
2012-08-18 12:18
501 查看
<%
'odb.Stream 对象 读取图片长度和宽度
'上传图片或显示SWF的时候都希望得到它的高度和宽度
'
'基本原理使用Adodb.Stream读二进制文件然后进行解析,然后返回一数组
'第一个元素为类型(BMP JPG PNG GIF SWF)
'第二个元素为宽度{width}
'第三个元素为高度{height}
'第四个元素为width={width},height={height}式字符串
Class GL_Img
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
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 GL=new GL_Img
Set FSO=CreateObject("Scripting.FileSystemObject")
Set F=FSO.GetFolder(Server.Mappath("../images/"))
Set FC=F.Files
For Each f1 In FC
ext=FSO.GetExtensionName(f1.path)
Select Case LCase(ext)
Case "gif","bmp","jpg","png":
arr=GL.getImageSize(f1.path)
Response.Write "<br>" & arr(0) & " " & arr(3) & ":" & f1.Name & " width:" & arr(1) & " height:" & arr(2)
Case "swf"
arr=GL.getimagesize(f1.path)
Response.Write "<br>" & arr(0) & " " & arr(3) & ":" & f1.Name & " width:" & arr(1) & " height:" & arr(2)
End Select
Next
Set FC=Nothing
Set F=Nothing
Set FSO=Nothing
Set GL=Nothing
%>
参考:
http://wenwen.soso.com/z/q156985833.htm
'odb.Stream 对象 读取图片长度和宽度
'上传图片或显示SWF的时候都希望得到它的高度和宽度
'
'基本原理使用Adodb.Stream读二进制文件然后进行解析,然后返回一数组
'第一个元素为类型(BMP JPG PNG GIF SWF)
'第二个元素为宽度{width}
'第三个元素为高度{height}
'第四个元素为width={width},height={height}式字符串
Class GL_Img
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
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 GL=new GL_Img
Set FSO=CreateObject("Scripting.FileSystemObject")
Set F=FSO.GetFolder(Server.Mappath("../images/"))
Set FC=F.Files
For Each f1 In FC
ext=FSO.GetExtensionName(f1.path)
Select Case LCase(ext)
Case "gif","bmp","jpg","png":
arr=GL.getImageSize(f1.path)
Response.Write "<br>" & arr(0) & " " & arr(3) & ":" & f1.Name & " width:" & arr(1) & " height:" & arr(2)
Case "swf"
arr=GL.getimagesize(f1.path)
Response.Write "<br>" & arr(0) & " " & arr(3) & ":" & f1.Name & " width:" & arr(1) & " height:" & arr(2)
End Select
Next
Set FC=Nothing
Set F=Nothing
Set FSO=Nothing
Set GL=Nothing
%>
参考:
http://wenwen.soso.com/z/q156985833.htm
相关文章推荐
- Adodb.Stream 对象 读取图片长度和宽度
- C++中读取图片长度和宽度
- C++实现读取图片长度和宽度
- AE:IPersistStream接口进行对象保存和读取
- 控制图片长度比例,及图片最大高度,最大宽度 JS代码
- 读取XML数据时,已超过最大字符串内容长度配额(8192)。可以通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象上的MaxStringContentLength属
- 读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。
- 存储两次序列化对象,读取报错问题 java.io.StreamCorruptedException: invalid type code: A
- php getimagesize 上传图片的长度和宽度检测代码
- Java读取图片文件的宽度和高度
- 最新Javascript按比例压缩图片,解决onload无法读取图片的高度和宽度问题
- java 根据位置,长度宽度截取图片
- 页面中在上传之前获取上传文件的路径(例子:获取上传图片的路径,获得上传图片的大小:长度和宽度)
- Java从数据库中读取Blob对象图片并显示
- android 固定图片长度和宽度的方法
- 读取图片资源转化为bitmap对象
- 阿里云服务器 云对象存储OOS(二) ---图片上传与读取demo
- 页面加载的时候,设置图片的长度、宽度分别为浏览器的长度宽度
- 使用web服务时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLen
- Javascript按比例压缩图片,解决onload无法读取图片的高度和宽度问题