Avatar billede jakobclausen Nybegynder
10. maj 2005 - 10:38 Der er 19 kommentarer og
2 løsninger

Lave thumbnails billeder

I forbindelse med en aktivitetskalender, har jeg lavet mulighed for at uploade 5 billeder til hvert arrangement. Jeg henter billederne ind på siden og sætter width=100, og så kan man klikke på dem for at se i fuld størrelse.
Men uploader man et billede der fylder 2 mb, vil billedet stadig fylde 2 mb selvom jeg kun viser den i mindre størrelse.

Jeg kunne derfor godt tænke mig et script, der laver et thumbnail med width 100 af det uploaded billed, som vises på hoved siden og klikker man for full size, vises det originale billede.

Nogen der kan hjælpe med en kode der kan dette ??
Avatar billede jakobdo Ekspert
10. maj 2005 - 10:59 #1
Prøv at kig i denne tråd: http://eksperten.dk/spm/546025
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 11:06 #2
Takker for linket - skal der virkelig så meget til for at lave det. Synes det virker meget uoverskueligt, og fatter ikke ret meget af det...
Avatar billede jakobdo Ekspert
10. maj 2005 - 11:12 #3
Det sonm jo skal gøres, er jo faktisk følgende:

Brugeren uploader et billede.
Billedet gemmes på serveren.
Billedet skal resizes og gemmes.

Så mere er jo som sådan ikke!

Det som man jo så skal huske!
Er at gemme ratio!
Så man ikke tager et billede i størrelsen: 400*800 og resizer til: 100*100.
Så der er nogle ting man skal holde styr på!
Men hvis du viser din upload kode, vil jeg gerne give et forsøg.
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 11:25 #4
Jeg har bygget min upload kode ud fra artiklen: http://www.udvikleren.dk/article.php?aid=138&techid=6

- - - - -
if($_REQUEST["fil"] != "")
{
  //Finder billednummer
  $count = SQL
  //Her skal filen flyttes fra
  $fra    = $_FILES['fil']['tmp_name'];
  //Hvilken type fil arbejder vi med?
  $ext    = strtolower(end(explode(".", $_FILES['fil']['name'])));
  //Hvis filen er et jpg, jpeg eller gif billede
  if($ext == "jpg" || $ext == "jpeg" || $ext == "gif")
  {
    //Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
    $nytNavn = $id."-".$count.".".$ext;
    //Her er vores destination
    $til = "img/".$nytNavn;
    //Her sker det magiske:
    move_uploaded_file($fra, $til);
  }
}
- - - - -
Avatar billede jakobdo Ekspert
10. maj 2005 - 20:11 #5
Jeg har ikke testet denne, så ved ikke om det virker:

- - - - -
if($_REQUEST["fil"] != "")
{
  //Finder billednummer
  $count = SQL
  //Her skal filen flyttes fra
  $fra    = $_FILES['fil']['tmp_name'];
  //Hvilken type fil arbejder vi med?
  $ext    = strtolower(end(explode(".", $_FILES['fil']['name'])));
  //Hvis filen er et jpg, jpeg eller gif billede
  if($ext == "jpg" || $ext == "jpeg" || $ext == "gif")
  {
    //Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
    $nytNavn = $id."-".$count.".".$ext;
    //Her er vores destination
    $til = "img/".$nytNavn;
   
    // Set a maximum height and width
        $width = 200;
        $height = 200;
       
        // Get new dimensions
        list($width_orig, $height_orig) = getimagesize($fra);
       
        if ($width && ($width_orig < $height_orig))
        {
            $width = ($height / $height_orig) * $width_orig;
        }
        else
        {
            $height = ($width / $width_orig) * $height_orig;
        }
       
        // Resample
        $image_p = imagecreatetruecolor($width, $height);
        if($ext == "jpg" || $ext == "jpeg")
            $image = imagecreatefromjpeg($filename);
        elseif($ext == "gif")
            $image = imagecreatefromgif($filename);
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
   
    //Her sker det magiske:
    move_uploaded_file($image_p, $til);
  }
}
- - - - -
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 20:26 #6
Tak - jeg kigger lige på det senere.
Er det korrekt at der ikke skal være:
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

hvis det er jpg/jpeg ??
Avatar billede coderdk Praktikant
10. maj 2005 - 20:26 #7
http://php.coder.dk/resizeimg.php

Her er en funktion du kan bruge ;)
Avatar billede jakobdo Ekspert
10. maj 2005 - 20:30 #8
Men er det ikke kun jpeg?
Eller den laver måske alle slags pics om til jpeg?
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 20:34 #9
jakobdo >> Jeg tænker bare på at du har imaagecopyresamled() under $ext == "gif", men ikke ved $ext == "jpg" || $ext == "jpeg".

Det er meget muligt at det skal være sådan...
Avatar billede jakobdo Ekspert
10. maj 2005 - 20:42 #10
if($ext == "jpg" || $ext == "jpeg")
  $image = imagecreatefromjpeg($filename);
elseif($ext == "gif")
  $image = imagecreatefromgif($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

Er det samme som:

if($ext == "jpg" || $ext == "jpeg")
{
  $image = imagecreatefromjpeg($filename);
}
elseif($ext == "gif")
{
  $image = imagecreatefromgif($filename);
}
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 20:44 #11
Ahh ok - min fejl! Jeg vender tilbage senere...
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 21:20 #12
jakobdo >>

Jeg får en masse fejlmeddelser:

- - - - -
Warning: open_basedir restriction in effect. File is in wrong directory

Warning: getimagesize: Unable to open '/tmp/phpv8utOQ' for reading.

Warning: Division by zero

Warning: imagecreatefromjpeg: Unable to open '' for reading

Warning: Supplied argument is not a valid Image resource

Warning: Unable to create 'img/2525.jpg': Permission denied

Warning: Unable to move '/tmp/phpv8utOQ' to 'img/2525.jpg'
- - - - -
NB! Jeg har slettet sti samt linie nummer

Første fejl er noget med at den er i forkert mappe - jeg har mit script liggende i hovedmappen, hvor min billed (img) mappe ligger - skal det angives nogen steder?
Avatar billede jakobdo Ekspert
10. maj 2005 - 21:50 #13
Det burde det ikke!
Muligvis du skal ændre rettigheder på mappen!
Normalt laver jeg den bare til 777, men det plejer at være i overkanten! (men prøv evt at chmod din mappe til 777)
Avatar billede jakobclausen Nybegynder
10. maj 2005 - 21:55 #14
Jeg har brugt CHMOD 777 på img-mappen, da det kræves for at kunne uploade billederne.
Avatar billede coderdk Praktikant
10. maj 2005 - 22:55 #15
Brug move_uploaded_file ind i dit eget homedir, før du læser eller behandler den (du bruger getimagesize før du flytter)...

Ja, mit eksempel var kun til jpeg, men den er jo nem at tilpasse:

    function resize( $filename, $newfilename, $maxw, $maxh )
    {
        if ( $info = @getimagesize( $filename ) )
        {
            if ( $info[2] == 1 )
            {
                $srcim = imagecreatefromgif( $filename );
                $func = "imagegif";
            }
            elseif ( $info[2] == 2 )
            {
                $srcim = imagecreatefromjpeg( $filename );
                $func = "imagejpeg;
            }
            elseif ( $info[2] == 3 )
            {
                $srcim = imagecreatefrompng( $filename );
                $func = "imagegif";
            }
            else
            {
              return false;
            }
            $ow = imagesx( $srcim );
            $oh = imagesy( $srcim );
            $wscale = $maxw / $ow;
            $hscale = $maxh / $oh;
            $scale = ( $hscale < $wscale ? $hscale : $wscale );
            $nw = round( $ow * $scale, 0 );
            $nh = round( $oh * $scale, 0 );
            $dstim = imagecreatetruecolor( $nw, $nh );
            imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
            $func( $dstim, $newfilename );
            imagedestroy( $dstim );
            imagedestroy( $srcim );
            return true;
        }
        else
        {
            return false;
        }
    }
Avatar billede coderdk Praktikant
10. maj 2005 - 22:55 #16
Gah:

            elseif ( $info[2] == 3 )
            {
                $srcim = imagecreatefrompng( $filename );
                $func = "imagegif";
            }

Skulle jo være:

            elseif ( $info[2] == 3 )
            {
                $srcim = imagecreatefrompng( $filename );
                $func = "imagepng";
            }
Avatar billede jakobclausen Nybegynder
11. maj 2005 - 10:37 #17
Jeg har prøvet mange forskellige ting, men der kommer stadig masse af fejl. Jeg tror ikke der er nogen forkert i jeres svar, men at jeg lige skal bruge lidt tid til at få det til at hænge sammen med min eksisterende kode.

Jakobdo, hvis du lige smider et svar, giver jeg point!
Avatar billede jakobdo Ekspert
11. maj 2005 - 18:00 #18
Svar...
(dog synes jeg kun det ville være fair at dele dem med CoderDK)
Avatar billede jakobclausen Nybegynder
11. maj 2005 - 19:28 #19
Jakobdo >> Det var skam også min plan :-)

Jeg takker for jeres svar - håber jeg får det til at virke..
Avatar billede jakobdo Ekspert
13. maj 2005 - 09:11 #20
Tak for point! (og havde lige overset CoderDK allerede havde smidt et svar) :o)
Avatar billede coderdk Praktikant
13. maj 2005 - 09:16 #21
Takker også :)

Og nu vil jeg så overveje at bevæge mig ud i det suveræne vejr! Det er VILDT godt! :D
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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