ASP改变图片尺寸 ASP放大图片尺寸 ASP缩小图片尺寸

发布时间:2013-09-19 11:33:46来源:阅读(1462)

    <%
    Class DealImgSize
     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, clow
      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 BinVal(bin)
      dim ret,i
      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,i
      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(2),bFlag,p1
      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 "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
      getImageSize=ret
     End Function
     
     Function Resize(ow,oh,rw,rh)
      dim wh(1)
      if cint(ow)>cint(oh) then
       if cint(ow)>cint(rw) then
         wh(0)=rw
      wh(1)=int(oh/(ow/rw))
       else
         wh(0)=ow
      wh(1)=oh
       end if
      else
       if cint(oh)>cint(rh) then
         wh(0)=int(ow/(oh/rh))
      wh(1)=rh
       else
         wh(0)=ow
      wh(1)=oh
       end if
      end if
      Resize=wh
     End Function
    End Class
    %>

    '********************

    '  使用方法

    '********************
    <%
      Dim aa
      Set aa=new DealImgSize
      Dim pw,ph,rpw,rph
      pw=aa.getImageSize(Server.MapPath("01.jpg"))(1)
      ph=aa.getImageSize(Server.MapPath("01.jpg"))(2)
      rpw=aa.Resize(pw,ph,160,120)(0)
      rph=aa.Resize(pw,ph,160,120)(1)
      Response.Write("") 
      Set aa=Nothing
    %>

关键字