ÀûÓÃFSOÈ¡µÃͼÏñÎļþÐÅÏ¢

¡¡¡¡<%

¡¡¡¡':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

¡¡¡¡':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

¡¡¡¡'::: 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

¡¡¡¡%>

¡¡¡¡(Ô­×÷Õߣº´óÖÞ)