02. maj 2003 - 09:23Der er
9 kommentarer og 1 løsning
Gem fil og komprimer igen
Hej
Jeg har nedenstående funktion, som skal kompimere en fil og derefter skal den vente lidt og komprimere den igen, hvis ikke filen er blevet lille nok. Men det virker ikke, fordi når den har komprimeret filen først gang, er filens størrelse blevet 0 kb. Mystisk! :-)
Den skriver:
str = 95061 størrelse: 95061 Venter, så filen gemmes helt færdig inden næste komprimering... Venter, så filen gemmes helt færdig inden næste komprimering... . . . Venter, så filen gemmes helt færdig inden næste komprimering... Venter, så filen gemmes helt færdig inden næste komprimering... er færdigkomprimeret 0
Set FS = CreateObject("Scripting.FileSystemObject") FileName = Server.MapPath (strNavn)
Set Image = Server.CreateObject("AspImage.Image") Image.LoadImage(FileName) 'resize for at at teste om scriptet overhovedet kan komprimere Image.resize 500, 1000 Image.FileName = (FileName) Image.SaveImage
Set Image = Server.CreateObject("AspImage.Image") Set newfile = FS.GetFile(FileName) fsize = newfile.size
If inStr(strNavn, ".jpg") or inStr(strNavn, ".jpeg") then do while fsize > 10000 response.write "str = " & fsize & "<br>" response.write "<br>størrelse: " & newfile.size Image.JPEGQuality = 80 Image.FileName = (FileName) Image.SaveImage
set newfile = nothing i = 0 for i = 1 to 10000 response.write "<br>Venter, så filen gemmes helt færdig inden næste komprimering..." next
Set newfile = FS.GetFile(FileName) fsize = newfile.size loop response.write "<br>er færdigkomprimeret " & fsize else sendBack("Billedet var for stort og kunne ikke gøres mindre, da der ikke er tale om en JPG-fil") end if
Set FS = CreateObject("Scripting.FileSystemObject") FileName = Server.MapPath (strNavn)
Set Image = Server.CreateObject("AspImage.Image") Image.LoadImage(FileName) 'resize for at at teste om scriptet overhovedet kan komprimere Image.resize 500, 1000 Image.FileName = (FileName) Image.SaveImage
Set Image = Server.CreateObject("AspImage.Image") Set newfile = FS.GetFile(FileName) fsize = newfile.size
If inStr(strNavn, ".jpg") or inStr(strNavn, ".jpeg") then do while fsize > 10000 response.write "str = " & fsize & "<br>" response.write "<br>størrelse: " & newfile.size Image.JPEGQuality = 80 Image.FileName = (FileName) Image.SaveImage
set newfile = nothing
nsize = fsize
' loop intil filstr er ændret do until nsize <> fsize doevents sleep 50
set tempfile = nothing Set tempfile = FS.GetFile(FileName) nsize =tempfile.size
response.write "<br>Venter, så filen gemmes helt færdig inden næste komprimering..." loop
Set newfile = FS.GetFile(FileName) fsize = newfile.size loop response.write "<br>er færdigkomprimeret " & fsize else sendBack("Billedet var for stort og kunne ikke gøres mindre, da der ikke er tale om en JPG-fil") end if
Jeg kan simpelt hen ikke få det til at virke lige meget, hvad jeg gør:
str = 95061 størrelse: 95061 Tid: 02-05-2003 12:46:41 Tid(2): 02-05-2003 12:47:31 Venter, så filen gemmes helt færdig inden næste komprimering... er færdigkomprimeret 0 ____________________________________________________________________
function setSize(strNavn)
Set FS = CreateObject("Scripting.FileSystemObject") FileName = Server.MapPath (strNavn)
Set Image = Server.CreateObject("AspImage.Image") Image.LoadImage(FileName) 'resize for at at teste om scriptet overhovedet kan komprimere Image.resize 500, 1000 Image.FileName = (FileName) Image.SaveImage
Set Image = Server.CreateObject("AspImage.Image") Set newfile = FS.GetFile(FileName) fsize = newfile.size
If inStr(strNavn, ".jpg") or inStr(strNavn, ".jpeg") then do while fsize > 10000 response.write "<br>str = " & fsize response.write "<br>størrelse: " & newfile.size Image.JPEGQuality = 80 Image.FileName = (FileName) Image.SaveImage
set newfile = nothing nsize = fsize
' loop intil filstr er ændret do until nsize <> fsize
Nu = Now Response.Write("<br>Tid: " & Nu) do while (DateDiff("s", Nu, Now) < 50) ' Bliver her i 50 sek loop Response.Write("<br>Tid(2): " & Now & "")
set tempfile = nothing Set tempfile = FS.GetFile(FileName) nsize = tempfile.size response.write "<br>Venter, så filen gemmes helt færdig inden næste komprimering..." loop
Set newfile = FS.GetFile(FileName) fsize = newfile.size loop response.write "<br>er færdigkomprimeret " & fsize else sendBack("Billedet var for stort og kunne ikke gøres mindre, da der ikke er tale om en JPG-fil") end if
>Både sleep og doevents skal være i scriptet- Men hverken sleep eller doevents virker... browseren stopper bare og der sker ikke mere... jeg har ladet den så i lang tid og den kom ikke videre.
>Prøv evt denne komponent. Jeg her ikke egen server
maxsize = 400000 ' angiver den maximale størrelse step = 5 ' angiver hvor meget kvaliteten skal køres ned med i hvert loop ' jo lavere værdi du angiver jo tættere kommer du på target (maxsize) men det tager også længere tid.
//akj
function setSize(strNavn)
maxsize = 400000 step = 5
FileName = Server.MapPath (strNavn)
Set FS = CreateObject("Scripting.FileSystemObject") Set Image = Server.CreateObject("AspImage.Image")
Set newfile = FS.GetFile(FileName)
fsize = newfile.size
Image.LoadImage(FileName) ratio = Image.JPEGQuality
Set FS = CreateObject("Scripting.FileSystemObject") FileName = Server.MapPath (strNavn) Set Image = Server.CreateObject("AspImage.Image") Image.LoadImage(FileName) Image.resize 80, 100 Image.FileName = (FileName) Image.SaveImage
'genfind billede Set newfile = FS.GetFile(FileName)
'difiner max-størrelse - skal bruges senere maxsize = 10000
'her starter jpg-komprimering If inStr(findFileName(strNavn), ".jpg") or inStr(findFileName(strNavn), ".jpeg") then
Set Image = Server.CreateObject("AspImage.Image") Image.LoadImage(FileName)
if newfile.size > maxsize then do until clng(newfile.size) < clng(maxsize) or Image.JPEGQuality < 10 Image.LoadImage(FileName) Image.FileName = (FileName) Image.JPEGQuality = Image.JPEGQuality - 5 Image.SaveImage
'genfind billede Set newfile = FS.GetFile(FileName) loop end if end if
if newfile.size > maxsize then fileDelete(strNAVN) sendBack("Billedet fylder for meget. Prøv med et andet billede, som fylder mindre.") end if
Det virker fint uden nogle former for "wait", så det er jo bare godt :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.