WEB开发网
开发学院WEB开发ASP 利用FSO取得BMP,JPG,PNG,GIF文件信息(大小,宽... 阅读

利用FSO取得BMP,JPG,PNG,GIF文件信息(大小,宽、高等)

 2002-06-12 11:07:21 来源:WEB开发网   
核心提示:<%':::':::'::: BMP, GIF, JPG and PNG :::':::':::'::: :::':::This function gets a specified number of bytes from any:::':::fil
<%
 ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 ':::  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, we'll 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

%>






Tags:利用 FSO 取得

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接