03. juli 2002 - 09:11Der er
17 kommentarer og 1 løsning
Billedere & Størrelser
Jeg er igang med en webside hvor der er nogle billeder på !
Min problem er at jeg vil gerne finde ud af hvor store i højden og i breden billed filerne er også bagefter sætte breden efter de besøgene´s skærm opløsning
Men hvis man retter breden på et billed skal man selvfølge også rette højden.
Er der nogle som har lejet med det før og kan give en mulig løsning ?
For hvis du bare vil finde størrelsen på billedet og rette højde/brede i HTML-tagen så behøver du ikke adgang til andet en FileSystemObject, hvis du kun bruger bmp,jpg,png, eller gif filer:
Du kan ikke med ASP få størrelsen på skærmoplysningen direkte. Man skal overføre størrelsen med et javascript i eksvis en querystring, som så kan hendtes af ASP koden.
Dette ændre størreslen på et billede når de vises:
<img src="fil.jpg" width="100" hight="203">
Men det ændre ikke på billedet fil størrelse så hvis det er 1024x2080 og fylder 1Mb så vil det stadig fylde en 1Mb og være 1024x2080 stort med denne linie:<img src="fil.jpg" width="100" hight="203"> Browseren vil dog selv resize billedet når det skal vises til 100x203.
Tja.. Med Javascript kan du ikke finde størrelsen på billedet (højde og brede), og man kan derfor ikke lave "intiligent" resize i HTML tagen det bliver noget med en fast værdi. Eks på javascript som viler jpg biller som lille billede: http://developer.irt.org/script/393.htm
Fordelen ved ASP er at du kan med eksvis FSO finde højde og brede og lave noge if sætninger:
maxHigh = 100 maxWidth = 100
GetBilledData(intHigh,intWidth) 'Eks, function sakl rette til det kode om bruge, det er for princippet i at hendte data.
'Tjek om high eller width er stør så ama får størt mulig tumbnail: if (intHigh > intWidth) then if (intHigh > maxHigh) then response.write "<img src=fil.jpg hight="&maxhigh& " width="&(Int(intWidth/(intHigh/maxHigh) & ">" else response.write "<img src=fil.jpg hight="&(Int(inthgh/(intWidth/maxWidth)& " width="&ntWidth& ">" end if else
hvis bruger det eks jeg har vist med FileSystemObject: Så kan du kalde denne function:
gfxSpex(flnm, width, height, depth, strImageType)
Den returnere brede i width, højde i height, antal farver i depth, og typen på dilen i strImageType.
du oprette et FSO object:
Set objFSO = CreateObject("Scripting.FileSystemObject") 'Her angiver du folderen den skal søge igennem Set objF = objFSO.GetFolder("c:\images") 'Hendter alle fil data fra folderen som er valgt. Set objFC = objF.Files
'Loop gemmen alle filer: For Each f1 in objFC 'Test om det er en gif jpg png fil if instr(ucase(f1.Name), ".GIF") OR instr(ucase(f1.Name), ".JPG") OR instr(ucase(f1.Name), ".PNG") then 'Kald function if gfxSpex(f1.Path, intWidth, intHigh, c, strType) = true then
Disse functioner og kode skal du ikke ændre i det skal bare pastes ind:
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)"
Jeg har lige lavaet dette eks, du kan kopier det hele ind i en asp fil. Gem den i en folder med nogle billeder i:
Det eneste du skal ændre i filen er denne linie hvor stien skal ændres til at passe med hvor du har gemt filen: 'Ret stien til den folder du har asp og billerne i Set objF = objFSO.GetFolder("C:\Inetpub\wwwroot\eksperten")
Jeg har også lavet resize af billederne hvor du bare retter maxHigh og maxWidth til dit behov: maxHigh = 100 maxWidth = 100
----- TEST FIL ------
<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) 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)"
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: 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") 'Ret stien til den folder du har asp og billerne i Set objF = objFSO.GetFolder("C:\Inetpub\wwwroot\eksperten")
For Each f1 in objFC if instr(ucase(f1.Name), ".GIF") OR instr(ucase(f1.Name), ".JPG") then response.write "<tr><td>Med FSO: " & f1.name & " ... " & f1.path & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then response.write intWidth & " x " & intHigh
maxHigh = 100 maxWidth = 100 fixedHigh = false
if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.