服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP教程 - 利用FSO取得BMP,JPG,PNG,GIF文件信息

利用FSO取得BMP,JPG,PNG,GIF文件信息

2019-11-01 12:49asp技术网 ASP教程

利用FSO取得BMP,JPG,PNG,GIF文件信息

  1. <%  
  2. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  3. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  4. '::: BMP, GIF, JPG and PNG :::  
  5. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  6. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  7. '::: :::  
  8. '::: This function gets a specified number of bytes from any :::  
  9. '::: file, starting at the offset (base 1) :::  
  10. '::: :::  
  11. '::: Passed: :::  
  12. '::: flnm => Filespec of file to read :::  
  13. '::: offset => Offset at which to start reading :::  
  14. '::: bytes => How many bytes to read :::  
  15. '::: :::  
  16. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  17. function GetBytes(flnm, offset, bytes)  
  18. Dim objFSO  
  19. Dim objFTemp  
  20. Dim objTextStream  
  21. Dim lngSize  
  22. on error resume next  
  23. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  24.  
  25. ' First, we get the filesize  
  26. Set objFTemp = objFSO.GetFile(flnm)  
  27. lngSize = objFTemp.Size  
  28. set objFTemp = nothing  
  29. fsoForReading = 1  
  30. Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)  
  31. if offset > 0 then  
  32. strBuff = objTextStream.Read(offset - 1)  
  33. end if  
  34. if bytes = -1 then ' Get All!  
  35. GetBytes = objTextStream.Read(lngSize) 'ReadAll  
  36. else  
  37. GetBytes = objTextStream.Read(bytes)  
  38. end if  
  39. objTextStream.Close  
  40. set objTextStream = nothing  
  41. set objFSO = nothing  
  42. end function  
  43.  
  44. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  45. '::: :::  
  46. '::: Functions to convert two bytes to a numeric value (long) :::  
  47. '::: (both little-endian and big-endian) :::  
  48. '::: :::  
  49. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  50. function lngConvert(strTemp)  
  51. lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))  
  52. end function  
  53. function lngConvert2(strTemp)  
  54. lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))  
  55. end function  
  56.  
  57. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  58. '::: :::  
  59. '::: This function does most of the real work. It will attempt :::  
  60. '::: to read any file, regardless of the extension, and will :::  
  61. '::: identify if it is a graphical image. :::  
  62. '::: :::  
  63. '::: Passed: :::  
  64. '::: flnm => Filespec of file to read :::  
  65. '::: width => width of image :::  
  66. '::: height => height of image :::  
  67. '::: depth => color depth (in number of colors) :::  
  68. '::: strImageType=> type of image (e.g. GIF, BMP, etc.) :::  
  69. '::: :::  
  70. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  71. function gfxSpex(flnm, width, height, depth, strImageType)  
  72. dim strPNG  
  73. dim strGIF  
  74. dim strBMP  
  75. dim strType  
  76. strType = ""  
  77. strImageType = "(unknown)"  
  78. gfxSpex = False  
  79. strPNG = chr(137) & chr(80) & chr(78)  
  80. strGIF = "GIF"  
  81. strBMP = chr(66) & chr(77)  
  82. strType = GetBytes(flnm, 0, 3)  
  83. if strType = strGIF then ' is GIF  
  84. strImageType = "GIF"  
  85. Width = lngConvert(GetBytes(flnm, 7, 2))  
  86. Height = lngConvert(GetBytes(flnm, 9, 2))  
  87. Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)  
  88. gfxSpex = True  
  89. elseif left(strType, 2) = strBMP then ' is BMP  
  90. strImageType = "BMP"  
  91. Width = lngConvert(GetBytes(flnm, 19, 2))  
  92. Height = lngConvert(GetBytes(flnm, 23, 2))  
  93. Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))  
  94. gfxSpex = True  
  95. elseif strType = strPNG then ' Is PNG  
  96. strImageType = "PNG"  
  97. Width = lngConvert2(GetBytes(flnm, 19, 2))  
  98. Height = lngConvert2(GetBytes(flnm, 23, 2))  
  99. Depth = getBytes(flnm, 25, 2)  
  100. select case asc(right(Depth,1))  
  101. case 0  
  102. Depth = 2 ^ (asc(left(Depth, 1)))  
  103. gfxSpex = True  
  104. case 2  
  105. Depth = 2 ^ (asc(left(Depth, 1)) * 3)  
  106. gfxSpex = True  
  107. case 3  
  108. Depth = 2 ^ (asc(left(Depth, 1))) '8  
  109. gfxSpex = True  
  110. case 4  
  111. Depth = 2 ^ (asc(left(Depth, 1)) * 2)  
  112. gfxSpex = True  
  113. case 6  
  114. Depth = 2 ^ (asc(left(Depth, 1)) * 4)  
  115. gfxSpex = True  
  116. case else  
  117. Depth = -1  
  118. end select  
  119.  
  120. else  
  121. strBuff = GetBytes(flnm, 0, -1) ' Get all bytes from file  
  122. lngSize = len(strBuff)  
  123. flgFound = 0  
  124. strTarget = chr(255) & chr(216) & chr(255)  
  125. flgFound = instr(strBuff, strTarget)  
  126. if flgFound = 0 then  
  127. exit function  
  128. end if  
  129. strImageType = "JPG"  
  130. lngPos = flgFound + 2  
  131. ExitLoop = false  
  132. do while ExitLoop = False and lngPos < lngSize  
  133.  
  134. do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize  
  135. lngPos = lngPos + 1  
  136. loop  
  137. if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then  
  138. lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))  
  139. lngPos = lngPos + lngMarkerSize + 1  
  140. else  
  141. ExitLoop = True  
  142. end if  
  143. loop  
  144. '  
  145. if ExitLoop = False then  
  146. Width = -1  
  147. Height = -1  
  148. Depth = -1  
  149. else  
  150. Height = lngConvert2(mid(strBuff, lngPos + 4, 2))  
  151. Width = lngConvert2(mid(strBuff, lngPos + 6, 2))  
  152. Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)  
  153. gfxSpex = True  
  154. end if  
  155.  
  156. end if  
  157. end function  
  158.  
  159. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  160. '::: Test Harness :::  
  161. ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
  162.  
  163. ' To test, we'll just try to show all files with a .GIF extension in the root of C:  
  164. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  165. Set objF = objFSO.GetFolder("c:\")  
  166. Set objFC = objF.Files  
  167. response.write "<table border=""0"" cellpadding=""5"">"  
  168. For Each f1 in objFC  
  169. if instr(ucase(f1.Name), ".GIF") then  
  170. response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"  
  171. if gfxSpex(f1.Path, w, h, c, strType) = true then  
  172. response.write w & " x " & h & " " & c & " colors"  
  173. else  
  174. response.write " "  
  175. end if  
  176. response.write "</td></tr>"  
  177. end if  
  178. Next  
  179. response.write "</table>"  
  180. set objFC = nothing  
  181. set objF = nothing  
  182. set objFSO = nothing  
  183.  
  184. %>  

延伸 · 阅读

精彩推荐