欢迎光临
我们一直在努力

利用fso取得bmp,jpg,png,gif文件信息(大小,宽、高等)_asp实例

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

<%
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::   BMP, GIF, JPG and PNG                                     :::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::                                                             :::
  :::  This function gets a specified number of bytes from any    :::
  :::  file, starting at the offset (base 1)                      :::
  :::                                                             :::
  :::  Passed:                                                    :::
  :::       flnm        => Filespec of file to read               :::
  :::       offset      => Offset at which to start reading       :::
  :::       bytes       => How many bytes to read                 :::
  :::                                                             :::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function GetBytes(flnm, offset, bytes)
     Dim objFSO
     Dim objFTemp
     Dim objTextStream
     Dim lngSize
     on error resume next
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     
      First, we get the filesize
     Set objFTemp = objFSO.GetFile(flnm)
     lngSize = objFTemp.Size
     set objFTemp = nothing
     fsoForReading = 1
     Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
     if offset > 0 then
        strBuff = objTextStream.Read(offset – 1)
     end if
     if bytes = -1 then          Get All!
        GetBytes = objTextStream.Read(lngSize)  ReadAll
     else
        GetBytes = objTextStream.Read(bytes)
     end if
     objTextStream.Close
     set objTextStream = nothing
     set objFSO = nothing
  end function

  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::                                                             :::
  :::  Functions to convert two bytes to a numeric value (long)   :::
  :::  (both little-endian and big-endian)                        :::
  :::                                                             :::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function lngConvert(strTemp)
     lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))
  end function
  function lngConvert2(strTemp)
     lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))
  end function
  
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::                                                             :::
  :::  This function does most of the real work. It will attempt  :::
  :::  to read any file, regardless of the extension, and will    :::
  :::  identify if it is a graphical image.                       :::
  :::                                                             :::
  :::  Passed:                                                    :::
  :::       flnm        => Filespec of file to read               :::
  :::       width       => width of image                         :::
  :::       height      => height of image                        :::
  :::       depth       => color depth (in number of colors)      :::
  :::       strImageType=> type of image (e.g. GIF, BMP, etc.)    :::
  :::                                                             :::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function gfxSpex(flnm, width, height, depth, strImageType)
     dim strPNG
     dim strGIF
     dim strBMP
     dim strType
     strType = ""
     strImageType = "(unknown)"
     gfxSpex = False
     strPNG = chr(137) & chr(80) & chr(78)
     strGIF = "GIF"
     strBMP = chr(66) & chr(77)
     strType = GetBytes(flnm, 0, 3)
     if strType = strGIF then                            is GIF
        strImageType = "GIF"
        Width = lngConvert(GetBytes(flnm, 7, 2))
        Height = lngConvert(GetBytes(flnm, 9, 2))
        Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)
        gfxSpex = True
     elseif left(strType, 2) = strBMP then               is BMP
        strImageType = "BMP"
        Width = lngConvert(GetBytes(flnm, 19, 2))
        Height = lngConvert(GetBytes(flnm, 23, 2))
        Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))
        gfxSpex = True
     elseif strType = strPNG then                        Is PNG
        strImageType = "PNG"
        Width = lngConvert2(GetBytes(flnm, 19, 2))
        Height = lngConvert2(GetBytes(flnm, 23, 2))
        Depth = getBytes(flnm, 25, 2)
        select case asc(right(Depth,1))
           case 0
              Depth = 2 ^ (asc(left(Depth, 1)))
              gfxSpex = True
           case 2
              Depth = 2 ^ (asc(left(Depth, 1)) * 3)
              gfxSpex = True
           case 3
              Depth = 2 ^ (asc(left(Depth, 1)))  8
              gfxSpex = True
           case 4
              Depth = 2 ^ (asc(left(Depth, 1)) * 2)
              gfxSpex = True
           case 6
              Depth = 2 ^ (asc(left(Depth, 1)) * 4)
              gfxSpex = True
           case else
              Depth = -1
        end select

     else
        strBuff = GetBytes(flnm, 0, -1)          Get all bytes from file
        lngSize = len(strBuff)
        flgFound = 0
        strTarget = chr(255) & chr(216) & chr(255)
        flgFound = instr(strBuff, strTarget)
        if flgFound = 0 then
           exit function
        end if
        strImageType = "JPG"
        lngPos = flgFound + 2
        ExitLoop = false
        do while ExitLoop = False and lngPos < lngSize

           do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
              lngPos = lngPos + 1
           loop
           if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then
              lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
              lngPos = lngPos + lngMarkerSize  + 1
           else
              ExitLoop = True
           end if
       loop
       
       if ExitLoop = False then
          Width = -1
          Height = -1
          Depth = -1
       else
          Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
          Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
          Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)
          gfxSpex = True
       end if
                   
     end if
  end function

  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::     Test Harness                                              :::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  
   To test, well just try to show all files with a .GIF extension in the root of C:
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objF = objFSO.GetFolder("c:\")
  Set objFC = objF.Files
  response.write "<table border=""0"" cellpadding=""5"">"
  For Each f1 in objFC
    if instr(ucase(f1.Name), ".GIF") then
       response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
       if gfxSpex(f1.Path, w, h, c, strType) = true then
          response.write w & " x " & h & " " & c & " colors"
       else
          response.write " "
       end if
       response.write "</td></tr>"
    end if
  Next
  response.write "</table>"
  set objFC = nothing
  set objF = nothing
  set objFSO = nothing

%>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 利用fso取得bmp,jpg,png,gif文件信息(大小,宽、高等)_asp实例
分享到: 更多 (0)