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

原创 2004年12月29日 16:27:00
通过Adodb.Stream取得图像(BMP JPG PNG GIF SWF)的高度和宽度

上传图片或显示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)
'qiushuiwuhen (2002-8-12)
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)
'qiushuiwuhen (2002-8-12)
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)
'qiushuiwuhen (2002-8-12)
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)
'qiushuiwuhen (2002-8-12)
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)
'qiushuiwuhen (2002-9-3)
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("s cripting.FileSystemObject")
Set f = fso.GetFolder(server.mappath("."))
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
Set fc=nothing
Set f=nothing
Set fso=nothing
Set qswh=nothing
<SCRIPT type=text/javascript><!-- google_ad_client = "pub-7468129032002806"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_channel =""; google_color_border = "DFF2FD"; google_color_bg = "DFF2FD"; google_color_link = "0000CC"; google_color_url = "008000"; google_color_text = "000000"; //--></SCRIPT> <SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT>

Nginx压缩模块

Nginx gzip模块类似于apach的mod_deflate压缩功能,依赖ngx_http_gzip_module模块。压缩配置: gzip on #开启起压缩功能 gzip_min_le...
  • zfx1997
  • zfx1997
  • 2017年12月18日 20:33
  • 53

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

基本原理使用adodb.stream读二进制文件然后进行解析,然后返回一数组 第一个元素为类型(bmp jpg png gif swf) 第二个元素为宽度{width} 第三个元素为高度{height...
  • feng_sundy
  • feng_sundy
  • 2008年10月31日 18:56
  • 5942

BMP、GIF、JPEG、PNG以及其他图片格式简介

BMP、GIF、JPEG、PNG以及其他图片格式简介
  • songjinshi
  • songjinshi
  • 2014年07月07日 15:49
  • 5551

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

上传图片或显示SWF的时候都希望得到它的高度和宽度基本原理使用Adodb.Stream读二进制文件然后进行解析,然后返回一数组第一个元素为类型(BMP JPG PNG GIF SWF)第二个元素为宽度...
  • qiushuiwuhen
  • qiushuiwuhen
  • 2002年09月08日 11:19
  • 1293

JPG png GIF BMP图片格式的区别

本文来自互联网,主要简介一下JPG png GIF BMP格式的区别,请看文章!
  • itluochen
  • itluochen
  • 2016年08月20日 17:55
  • 3233

png、jpeg、bmp、gif区别

BMP:是一种与硬件设备无关的图像文件格式,使用非常广。采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。 GIF:是用于压缩具有单调颜色和清晰细节的图...
  • apollolkj
  • apollolkj
  • 2015年04月16日 16:12
  • 1550

BMP、PCX、PNG、JPEG、GIF图形格式区别

BMP:Windows 位图  Windows 位图可以用任何颜色深度(从黑白到 24 位颜色)存储单个光栅图像。Windows 位图文件格式与其他 Microsoft Windows 程序兼容。它...
  • skyflying2012
  • skyflying2012
  • 2013年12月01日 13:56
  • 1670

Java 转换png jpg gif格式图片的相互转换的实现

利用JDK原生支持对png jpg gif格式图片做相互转换,结合脚本就可以达到批量处理的能力,比PS来的快啊!而且是JAVA代码 在Windows和Linux上都可以用。import java.aw...
  • dengxu11
  • dengxu11
  • 2011年08月12日 16:53
  • 11251

图像格式jpg、jpeg、jpe、gif、png、png等有何不同?ps中那种图片格式可以保留图层?

(1)jpg格式:即为jpeg格式,是通过压缩改变画质和文件尺寸的格式。压缩后恶化的图像无法还原,使用于数字图像及Web中的照片中。 (2)jpeg格式:是目前网络上最流行的图像格式,一般简称为jp...
  • dreamzuora
  • dreamzuora
  • 2016年04月10日 14:44
  • 1671

nginx配置静态资源地址

server { listen 80 default; server_name _; root /alidata/www/default; //这个就是静...
  • AlbertFly
  • AlbertFly
  • 2016年05月23日 12:27
  • 4466
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Adodb.Stream取得图像(BMP JPG PNG GIF SWF)的高度和宽度
举报原因:
原因补充:

(最多只允许输入30个字)