日期:2014-05-17  浏览次数:20815 次

如何用ASP获取远程图片的高度
在页面中指定了宽度,如何用ASP获取远程图片的高度

比如:http://www.hdsjw.com/uploadfiles/200711299623757.jpg

<img src="http://www.hdsjw.com/uploadfiles/200711299623757.jpg" style="width: 313px; height: ???px;">



------解决方案--------------------
VBScript code

Class imgInfo
    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
    err.clear
    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

Private Function getImageSize(filespec,filefrom)
dim ret(3)
select case filefrom
    case 1
        '1为同域文件,否则为异域文件
        aso.LoadFromFile(filespec)
    case 2
        ASO.Write filespec
        ASO.Position = 0
end select
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

Public Function imgW(pic_path,filefrom)
    '参数filefrom是判断文件是远程http开头的还是本地的
    '1为本地,2为远程
    select case filefrom
        case 1
            Set fso1 = server.CreateObject("Scripting.FileSystemObject")
            If (fso1.FileExists(pic_path)) Then
                Set f1 = fso1.GetFile(pic_path)
                ext=fso1.GetExtensionName(pic_path)
                select case ext
                case "gif","bmp","jpg","png":
                arr=getImageSize(f1.path,1)
                imgW = arr(1)
                end select
                Set f1=nothing
            else
                imgW = 0
            End If
            Set fso1=nothing
        case 2
            Arr=GetImageSize(pic_path,2)