回 帖 发 新 帖 刷新版面

主题:[讨论]利用ASP获得图片尺寸大小的代码

http://www.webjx.com/htmldata/2006-04-02/1143942810.html
网站里的 关于利用ASP获得图片尺寸大小的代码
我用上了
贴上来
大家需要的参考参考

<%  
imgpath="default_22.gif"

 set  pp=new  imgInfo  
 w = pp.imgW(server.mappath(imgpath))  
 h = pp.imgH(server.mappath(imgpath)) 
 set pp=nothing 
 
response.write "<img src='"&imgpath&"' border=0><br>宽:"&w&";高:"&h

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  
%>  
<%

回复列表 (共11个回复)

沙发

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)    
   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  
   
 Public Function  imgW(pic_path)  
     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)  
     imgW = arr(1)  
   end  select  
   Set  f1=nothing 
  else
      imgW = 0
  End if   
     Set  fso1=nothing  
 End  Function  
 
 Public Function  imgH(pic_path)  
     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)  
     imgH = arr(2)  
   end  select  
   Set  f1=nothing  
  else
   imgH = 0 
  End if  
     Set  fso1=nothing  
 End  Function  
End  Class
%>

板凳

用Adodb.recordset做字符串类形转换不是更好

3 楼

怎么说?你有更好的 方法吗?
好像你说的 和这里所讲的asp取得图片大小 不太相关吧

4 楼

没有这么麻烦的吧 

5 楼

哦???
那位有更好的方法~~~

6 楼

感觉上这样做是不是有点小题大做了啊 呵呵 说明:我没有做过这个 所以没有什么方法

7 楼

我也没用过!
可我也觉得太那个了!
把图片放入pohtoshop不就知道了么!!
呵呵!!

8 楼

当然不是 像楼上所说的那样了 我的 这个 数据 需要自动的针对别人上传的图片进行取其图片的宽度和高度 并且 同时保存到数据库中 以用于在图片显示的时候 规定显示的大小 以至于 不超出规定的 大小(显示的时候)~~

9 楼

[quote]当然不是&nbsp;像楼上所说的那样了&nbsp;我的&nbsp;这个&nbsp;数据&nbsp;需要自动的针对别人上传的图片进行取其图片的宽度和高度&nbsp;并且&nbsp;同时保存到数据库中&nbsp;以用于在图片显示的时候&nbsp;规定显示的大小&nbsp;以至于&nbsp;不超出规定的&nbsp;大小(显示的时候)~~[/quote]
那样的话,你的排版问题又会是一大串代码了吧?

10 楼

不至于了 
专门放一个 function.asp 来放那些 函数就好了~~
呵呵~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册