软件注册站
热情软件屋

 
如何用asp取得图像的实际尺寸
编号: QA003669    
建立日期: 2000年12月17日 最后修改日期: 2000年12月17日
所属类别: 其他语言 - 图形、图象
   
    操作系统: window98,window2000
    编程工具: asp
    问题: 如何用asp取得图像的实际尺寸? asp中有无函数可直接用就能得到图象尺寸?
    水平: 刚入门(霏霏)
   
    实际上每个图形文件中都有专门记录尺寸的数据,下面的例子来自Determining Image Properties through ASP(http://www.4guysfromrolla.com/webtech/050300-1.shtml)。它演示了如何使用FileSystemObject去读这些数据。
    <%
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     '::: :::
     '::: This routine will attempt to identify any filespec passed :::
     '::: as a graphic file (regardless of the extension). This will :::
     '::: work with BMP, GIF, JPG and PNG files. :::
     '::: :::
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     '::: Based on ideas presented by David Crowell :::
     '::: (credit where due) :::
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
     '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
     '::: blah blah Copyright *c* MM, Mike Shaffer blah blah :::
     '::: blah blah ALL RIGHTS RESERVED WORLDWIDE blah blah :::
     '::: blah blah Permission is granted to use this code blah blah :::
     '::: blah blah in your projects, as long as this blah blah :::
     '::: blah blah copyright notice is included blah blah :::
     '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
     '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
     ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     '::: :::
     '::: 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 =&gt; Offset at which to start reading :::
     '::: bytes =&gt; 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 &gt; 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 =&gt; Filespec of file to read :::
     '::: width =&gt; width of image :::
     '::: height =&gt; height of image :::
     '::: depth =&gt; color depth (in number of colors) :::
     '::: strImageType=&gt; 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) &amp; chr(80) &amp; chr(78)
     strGIF = "GIF"
     strBMP = chr(66) &amp; 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) &amp; chr(216) &amp; 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>" &amp; f1.name &amp; "</td><td>" &amp; f1.DateCreated &amp; "</td><td>" &amp; f1.Size &amp; "</td><td>"
    
     if gfxSpex(f1.Path, w, h, c, strType) = true then
     response.write w &amp; " x " &amp; h &amp; " " &amp; c &amp; " 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
    
    
    %>
    

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, 其他语言, asm, vba, vbscript, 图形、图象, picture, graph, image, draw

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio