http://p2p.wrox.com/archive/proasp_codeclinic/2000-04/8.asp
HTH Sam Thompson ---------------------------------------------- 2cs Communications Ltd http://www.2cs.com [EMAIL PROTECTED] T: 01473 622263 F: 01473 622515 ----------------------------------------------- ----- Original Message ----- From: "Craig" <[EMAIL PROTECTED]> To: "ActiveServerPages" <[EMAIL PROTECTED]> Sent: Thursday, August 22, 2002 3:27 PM Subject: Image Properties Difficult Question. > I'm using the script that Tim Fletcher recommended yesterday. The one you > told me about David (Penton) kept returning weird values for .GIF's and > would not return anything for .JPG's. > > This script works perfectly for .GIF's (with a little modification I had > to add) but craps out on .JPG's. Part of the returned page is this: > > ---------------------------------------------------------------------- > watercooler_bubbling2_md_wht.gif 10/10/01 12:48:34 PM 4117 76 x 120 128 > colors > virtualwatercooler1502.gif 10/10/01 12:48:34 PM 3257 150 x 90 128 colors > header.jpg 11/02/01 4:19:12 PM 92472 Microsoft VBScript runtime error > '800a0005' > > Invalid procedure call or argument: 'asc' > > /imgsz.asp, line 91 > ----------------------------------------------------------------------- > > It always errors out when it reaches the first .JPG in the folder. > > Here is the code below with line 91 marked. > > <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > > <HTML> > <HEAD><TITLE></TITLE> > </HEAD> > <BODY><% > '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: > '::: ::: > '::: 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 => 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) > LINE 91 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 > > 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 > > 'Response.Write "lngPos = " & lngPos & "<BR><BR>" > 'Response.Write "strBuff = " & strBuff & "<BR><BR>" > > if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then > value = (mid(strBuff, lngPos + 1, 2)) > 'Response.Write "value = " & value > 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("/usr/local/apache/internaldev/images") > Set objFC = objF.Files > > response.write "<table border=""0"" cellpadding=""5"">" > > For Each f1 in objFC > if instr(ucase(f1.Name), ".GIF") OR instr(ucase(f1.Name), ".JPG") 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 > > 'my code added to convert resulting image widths and heights to > something closely resembling pixel width > 'As some values (apparently random) are correct in pixels to begin > with, only those values that likely > 'need converting, those > 2000, are subject to the routine > if w > 2000 then > w = w/257 > end if > > if h > 2000 then > h = h/257 > end if > > > 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 > > > %> > </BODY> > </HTML> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > Any suggestions please? > > Thanks so much. > > > > > --- > You are currently subscribed to activeserverpages as: [EMAIL PROTECTED] > To unsubscribe send a blank email to %%email.unsub%% > --- You are currently subscribed to activeserverpages as: [email protected] To unsubscribe send a blank email to [EMAIL PROTECTED]
