欢迎光临
我们一直在努力

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

建站超值云服务器,限时71元/月

上传图片或显示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("scripting.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

现该文章仅限在csdn文档中心发表,若需要转载,请和作者联系,谢谢。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 通过Adodb.Stream取得图像(BMP JPG PNG GIF SWF)的高度和宽度
分享到: 更多 (0)

相关推荐

  • 暂无文章