Forums
This topic is locked
Dynamic Image Resize - Very close...Help!
Posted 19 Feb 2007 23:54:25
1
has voted
19 Feb 2007 23:54:25 Kilgore Trout posted:
I'm using this image resize script to dynamically resize images from an access database on my asp pages. Underneath the article are some comments of users who have implemented the script successfully so it should work. I've eliminated all browser and syntax errors so now my page displays the images but they are NOT resized. Here is the article with user comments on the bottom:
Resize Image Article
Here's my reference to the neccessary includes:
<pre id=code><font face=courier size=2 id=code><%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--#include virtual="apm/inc/imgsz.asp"-->
<!--#include virtual="apm/inc/propresize.asp"-->
<html xmlns="www.w3.org/1999/xhtml"></font id=code></pre id=code>
Here is the code from the first script include: (imgsz.asp)
<pre id=code><font face=courier size=2 id=code><%
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: 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)
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
%>
</font id=code></pre id=code>
Here is the code from the second script include: (propresize.asp)
<pre id=code><font face=courier size=2 id=code><%
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: SCRIPT: PropResize :::
'::: AUTHOR: Mike Shaffer :::
'::: DATE: 03-May-2000 :::
'::: PURPOSE: Creates a WIDTH/HEIGHT parameter string :::
'::: (for use with the <IMG...> tag to allow :::
'::: for proportional resizing :::
'::: NOTE: Requires routines found in IMGSZ.ASP :::
'::: www.4guysfromrolla.com/webtech/050300-1.shtml :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: 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 blah blah :::
'::: blah blah blah blah blah blah :::
'::: blah blah blah Copyright *c* MM, Mike Shaffer blah blah blah :::
'::: blah blah blah ALL RIGHTS RESERVED WORLDWIDE blah blah blah :::
'::: blah blah blah Permission is granted to use this code blah blah blah :::
'::: blah blah blah in your projects, as long as this blah blah blah :::
'::: blah blah blah copyright notice is included blah blah blah :::
'::: blah blah blah and is unaltered. blah blah blah :::
'::: blah blah blah blah blah blah :::
'::: blah blah blah CONTACT: or 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 blah blah blah :::
'::: blah blah blah blah blah blah blah blah blah blah blah blah blah blah :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function ImageResize(strImageName, intDesiredWidth, intDesiredHeight)
dim TargetRatio
dim CurrentRatio
dim strResize
dim w, h, c, strType
if gfxSpex(strImageName, w, h, c, strType) = true then
TargetRatio = intDesiredWidth / intDesiredHeight
CurrentRatio = w / h
if CurrentRatio > TargetRatio then ' We'll scale height
strResize = "width=""" & intDesiredWidth & """"
else
strResize = "height=""" & intDesiredHeight & """"
' We'll scale width
end if
else
strResize = ""
end if
ImageResize = strResize
end Function
%></font id=code></pre id=code>
Here is the recordset code:
<pre id=code><font face=courier size=2 id=code><%
Dim rs_lp_description
Dim rs_lp_description_cmd
Dim rs_lp_description_numRows
Set rs_lp_description_cmd = Server.CreateObject ("ADODB.Command"
rs_lp_description_cmd.ActiveConnection = MM_conn_APM_STRING
rs_lp_description_cmd.CommandText = "SELECT * FROM WebsiteItems ORDER BY SalePrice DESC"
rs_lp_description_cmd.Prepared = true
Set rs_lp_description = rs_lp_description_cmd.Execute
rs_lp_description_numRows = 0
[COLOR=Red]strImage= (rs_lp_description.Fields.Item("IPPImageName".Value)
StrImageName1= Server.MapPath("img/" & "strImage"[/COLOR]
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index
Repeat1__numRows = 8
Repeat1__index = 0
rs_lp_description_numRows = rs_lp_description_numRows + Repeat1__numRows
%>
</font id=code></pre id=code>
and here is the reference to the image on the page:
<pre id=code><font face=courier size=2 id=code><img src="<%=(rs_lp_description.Fields.Item("IPPImageName".Value)%>"<%=ImageResize(StrImageName1, 100, 100)%> alt="image" name="lpImage" border="0" id="lpImage" /></font id=code></pre id=code>
Also, I'm using IIS as a testing server.
Any suggestion would be greatly appreciated. Thanks in advance.