欢迎光临
我们一直在努力

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

建站超值云服务器,限时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文件信息(大小,宽、高等)
分享到: 更多 (0)

相关推荐

  • 暂无文章