Avatar billede axkris Nybegynder
01. maj 2003 - 20:03 Der er 11 kommentarer og
2 løsninger

komprimering af jpg-fil virker ikke

Hej

Når jeg kører nedenstående script, siger den:

størrelse: 21580
er færdigkomprimeret 0

Det var ikke meningen, den skulle i stedet havde skrevet en værdi, som er under 10000.

_________________________________________

    Set FS = CreateObject("Scripting.FileSystemObject")
    FileName = Server.MapPath (strNavn)
   
    Set Image = Server.CreateObject("AspImage.Image")

    Set newfile = FS.GetFile(FileName)

    If inStr(strNavn, ".jpg") or inStr(strNavn, ".jpeg") then
        do while newfile.size > 10000
            response.write "<br>størrelse: " & newfile.size
              Image.JPEGQuality = 80
              Image.FileName = (FileName)
              Image.SaveImage
          loop
          response.write "<br>er færdigkomprimeret " & newfile.size
      else
          sendBack("Billedet var for stort og kunne ikke gøres mindre, da der ikke er tale om en JPG-fil")
      end if

    Set Image = nothing
         

_________________________________

Meningen med scriptet er, at det skal komprimere en jpg indtil filen kommer under 10kb. Kan du udbygges mit script, så det virker?
Avatar billede axkris Nybegynder
01. maj 2003 - 20:05 #1
Det var ikke meningen... = Det var ikke meningen, at "færdigkomprimeret" skulle havde skrevet en værdi, som er under 10000. Men den skriver fejlagtigt nul.
Avatar billede axkris Nybegynder
01. maj 2003 - 20:07 #2
Hold kæft noget vrøvl :-) prøver igen igen

Det var meningen, at "færdigkomprimeret" skulle have skrevet en værdi, som var under 10000. Men den skriver fejlagtigt nul.
Avatar billede axkris Nybegynder
01. maj 2003 - 20:18 #3
Her kommer lige den seneste kode - men problemstillingen er stadig den samme:

function setSize(strNavn)

    Set FS = CreateObject("Scripting.FileSystemObject")
    FileName = Server.MapPath (strNavn)
   
    Set Image = Server.CreateObject("AspImage.Image")
      Image.LoadImage(FileName)
      'Er koblet fra for at teste om scriptet overhovedet kan komprimere
      'Image.resize 80, 100
      Image.FileName = (FileName)
      Image.SaveImage

    Set newfile = FS.GetFile(FileName)

    If inStr(strNavn, ".jpg") or inStr(strNavn, ".jpeg") then
        do while newfile.size > 10000
            response.write "<br>størrelse: " & newfile.size
              Image.JPEGQuality = 80
              Image.FileName = (FileName)
              Image.SaveImage
          loop
          response.write "<br>er færdigkomprimeret " & newfile.size
      else
          sendBack("Billedet var for stort og kunne ikke gøres mindre, da der ikke er tale om en JPG-fil")
      end if
   
    Set Image = nothing
         
end function
Avatar billede axkris Nybegynder
01. maj 2003 - 21:45 #4
jeg har også prøvet at indsætte en wait-sætning, men det virker heller ikke... hjælp!!!!

function setSize(strNavn)

    Set FS = CreateObject("Scripting.FileSystemObject")
    FileName = Server.MapPath (strNavn)
   
    Set Image = Server.CreateObject("AspImage.Image")
      Image.LoadImage(FileName)
      'Er koblet fra for at teste om scriptet overhovedet kan komprimere
      'Image.resize 80, 100
      Image.FileName = (FileName)
      Image.SaveImage

    Set newfile = FS.GetFile(FileName)

    If inStr(strNavn, ".jpg") or inStr(strNavn, ".jpeg") then
        do while newfile.size > 10000
            response.write "<br>størrelse: " & newfile.size
              Image.JPEGQuality = 80
              Image.FileName = (FileName)
              for intloop=1 to 10000000
            next
              Image.SaveImage
              for intloop=1 to 10000000
            next
          loop
          response.write "<br>er færdigkomprimeret " & newfile.size
      else
          sendBack("Billedet var for stort og kunne ikke gøres mindre, da der ikke er tale om en JPG-fil")
      end if
   
    Set Image = nothing
         
end function
Avatar billede dk_akj Nybegynder
01. maj 2003 - 21:51 #5
fsize = newfile.size
  do while fsize > 10000
            response.write "<br>størrelse: " & newfile.size
              Image.JPEGQuality = 80
              Image.FileName = (FileName)
              Image.SaveImage
' evt set newfile = nothing

' du skal have fat i filen igen for at læse størrelsen
Set newfile = FS.GetFile(FileName)
' grab størrelse.
fsize = newfile.size

          loop


//akj
Avatar billede axkris Nybegynder
01. maj 2003 - 21:53 #6
Ok, men kan du ikke lige skrive hele koden sådan, som den skal se ud?
Avatar billede axkris Nybegynder
01. maj 2003 - 21:55 #7
... gerne med en korrekt wait-sætning (jeg har desværre ingen modul hertil)
Avatar billede dk_akj Nybegynder
01. maj 2003 - 22:15 #8
der burde ikke være behov for at vente.


Set FS = CreateObject("Scripting.FileSystemObject")
    FileName = Server.MapPath (strNavn)
   
    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>størrelse: " & newfile.size
              Image.JPEGQuality = 80
              Image.FileName = (FileName)
              Image.SaveImage

        set newfile = nothing   
        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 Image = nothing


//akj
Avatar billede axkris Nybegynder
01. maj 2003 - 22:18 #9
Den giver desværre det samme resultat - f.eks.:
størrelse: 21856
er færdigkomprimeret 0
Avatar billede dk_akj Nybegynder
01. maj 2003 - 22:38 #10
Set FS = CreateObject("Scripting.FileSystemObject")
    FileName = Server.MapPath (strNavn)
   
    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   
' måske virker denne forsinkelse
i = 0
for i = 1 to 10000
  doevents
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

    Set Image = nothing
Avatar billede axkris Nybegynder
02. maj 2003 - 08:47 #11
hvad skal der stå i stedet for doevents?
Avatar billede axkris Nybegynder
02. maj 2003 - 09:08 #12
jeg har brug for en hurtig løsning, så jeg bliver nødt til at lukke her og fortsætte et andet sted :-)
Avatar billede axkris Nybegynder
02. maj 2003 - 09:26 #13
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester