T O P I C R E V I E W |
Carefree |
Posted - 13 June 2009 : 09:46:51 The Topic Image Preview MOD scans topics from allowed forums, then displays images and associated topic titles from the last 10 topics which included images. Each image thumbnail is linked to a full size version and each topic title is linked to the topic itself.
This mod includes a check of whether members are allowed access to a forum before displaying the images.
Guests are not allowed access. To allow access to guests, in "Topic_Images.asp", delete (or comment out) lines 50-52; or in "inc_topic_images.asp", delete (or comment out) lines 41-43.
"inc_topic_images.asp" is provided to enable the image display to appear in "active.asp" (if you want them displayed with the active topics page).
Get a copy at SnitzBitz.
Edit: Thanks to a suggestion by Etymon, in v1.1, I added a check to determine whether images are allowed at all, and another to check if there is an image path. |
15 L A T E S T R E P L I E S (Newest First) |
Carefree |
Posted - 02 July 2009 : 12:32:17 No problem. It's not really necessary for the mod, just would improve it a bit. |
AnonJr |
Posted - 02 July 2009 : 11:25:36 I'd love to dig in and help trouble-shoot but I've overbooked myself a tad and have been working furiously to un-bury myself... |
Carefree |
Posted - 01 July 2009 : 17:45:54 I've tested that routine before for local files - there's a similar one for remote files, but the portion for .jpg fails. |
AnonJr |
Posted - 01 July 2009 : 17:17:40 I needed something similar for a local .vbs to generate an XML file with image specs. I've used the following functions in that project - context is provided. Can't remember where I originaly got them though...
'collect the image information into an array
Dim blnGfxSpex, width, height, colors, strType
intCount = 0
For Each objFile In objFS.GetFolder(".\images").Files
'As per the readme, images need to be 'non-progressive' JPGs
If LCase(Right(objFile.Name, 4)) = ".jpg" and intCount <= intNumOfFiles Then
blnGfxSpex = gfxSpex((".\images\" & objFile.Name), width, height, colors, strType)
MsgIE Now() & " - Now getting information on " & (intCount + 1) & " of " & intNumOfFiles & "."
arrImages(intCount) = "<image>" & vbNewLine & _
"<filename>" & objFile.Name & "</filename>" & vbNewLine & _
"<caption></caption>" & vbNewLine & _
"<width>" & width & "</width>" & vbNewLine & _
"<height>" & height & "</height>" & vbNewLine & _
"</image>" & vbNewLine
intCount = intCount + 1
End If
Next
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: 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
|
Carefree |
Posted - 01 July 2009 : 15:55:40 You're welcome. Now, if only I can get the remote image dimensions to read properly, I can scale the table & images down some. |
Classicmotorcycling |
Posted - 01 July 2009 : 15:05:55 Tested and now matches the topics and images on my site. Thanks Craig.. |
richfed |
Posted - 01 July 2009 : 06:52:09 And, thank you Mr, Carefree ... this issue IS all resolved on my site!!! |
Carefree |
Posted - 01 July 2009 : 04:06:13 quote: Originally posted by Classicmotorcycling
Not for the test site, sorry.
What I am getting is that there is an image in a topic, but when you click on the topic, there is no image in the actual topic. The image relates to a different topic when I do a search for for the image name in the search function I find they topic which is totally different.
Great concept but.
Issue has been resolved. Enjoy |
Carefree |
Posted - 29 June 2009 : 23:13:32 I received the EMail, replied.
I tried several approaches to get remote photo dimensions read (to allow for resizing to a uniform width or height), the .gifs were read fine, but .jpgs were not. Since the vast majority of posted images seem to be in the .jpg format, that made resizing worthless. If I could get the dimensions of remote images extracted, I can shrink the table & photos. |
richfed |
Posted - 29 June 2009 : 18:31:59 OK, I have it all straightened out with the exception of the mismatched photos. I tried to send you an e-mail; receieved an Earthlink reply about spam. What do you need, Carefree?
OH, also ... how could I make the whole photo table smaller with uniform thumbnails or something. I think it would look much neater.
Thanks! |
Carefree |
Posted - 28 June 2009 : 17:32:43 quote:
When logged in as Admin, I see the images off of the inc_header link, BUT they do not correspond to the correct thread. [Looks like the same problem Classicmotorcycling experienced.]
I have no idea what is causing this behavior. I have tried the mod on different forums, versions 3.4.05 -> 3.4.07, and cannot get it to display images from other posts. If you set me up access so I can see this, I'll fix it.
quote: When logged out completely, I get the following error when clinking on the inc_header link [before commenting out, I got the desired loop back to default.asp]:
Microsoft VBScript runtime error '800a000d' Type mismatch: 'chkForumAccessNew'
/messageboard/topic_images.asp, line 196
Fixed. I added bypass routines so that non-members aren't checked for access to particular forums.
quote: When accessing the Active Topics Page, I get this error, logged in or not:
Microsoft VBScript compilation error '800a0411'
Name redefined
/messageboard/inc_topic_images.asp, line 44
Dim strTgtURL(10), strSubj(10), strTPID(10) ----^
Fixed. I had forgotten to delete this after moving it to "config.asp". |
richfed |
Posted - 28 June 2009 : 15:27:05 Not there, yet, Carefree ...
After downloading and installing AND commenting out the appropriate lines so that guests can see the previews also, here's what I experience:
1 - When logged in as Admin, I see the images off of the inc_header link, BUT they do not correspond to the correct thread. [Looks like the same problem Classicmotorcycling experienced.]
2 - When logged out completely, I get the following error when clinking on the inc_header link [before commenting out, I got the desired loop back to default.asp]:
quote: Microsoft VBScript runtime error '800a000d' Type mismatch: 'chkForumAccessNew'
/messageboard/topic_images.asp, line 196
3 - When accessing the Active Topics Page, I get this error, logged in or not:
quote: Microsoft VBScript compilation error '800a0411'
Name redefined
/messageboard/inc_topic_images.asp, line 44
Dim strTgtURL(10), strSubj(10), strTPID(10) ----^
I do not know the results when logged in as a normal user. |
Carefree |
Posted - 28 June 2009 : 01:22:53 OK - 3.4.05 is included. |
richfed |
Posted - 27 June 2009 : 19:07:17 That would be great ... thanks! |
Carefree |
Posted - 27 June 2009 : 15:45:47 Let me dig up a copy of 3.4.05 and see what needs to be changed to make it work. I'll make you a copy with individual copies of instructions in htm format. |
|
|