Avatar billede tamen Nybegynder
17. november 2005 - 12:44 Der er 4 kommentarer og
1 løsning

Thumbnail function

Jeg er ved at lave en side hvor brugerne kan uploade billeder. Original billedet bliver gemt, og jeg skal bruge en funktion der kan lave et par thumbnails i forskellige størrelser ud fra org-billedet.

Der skal kun arbejdes med jpg-billeder. Men jeg ved selvfølgelig ikke hvilke størrelser de bliver uploadet i, så funktionen skal tage  det størst mulige udsnit af billedet der passer til den størrelse thumbnail det skal lave. Sagt med andre ord, funktionen skal klippe i billedet hvis nødvendigt.

Jeg syntes det lyder meget forvirrende, så jeg præciserer lige. Igen ;)

Brugeren uploader et billede der er 100x120px. Jeg skal have lavet et thumbnail der er 10x10px, så jeg kalder resize($fil, 10, 10);
Thumbanilet skal så vise det orginale billede skaleret ned til 10px i bredden og de midterste 10px i højden. De givne mål kan selvfølgelig ændres.

PS: Der er GD installeret på serveren, ikke imagemagick.
Avatar billede jakobdo Ekspert
17. november 2005 - 12:49 #1
Jeg har lavet denne funktion:

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $srcim = NULL;
   
    list($width, $height, $filetype, $attr) = getimagesize($filename);

    switch($filetype)
    {
        case 1:
            $srcim = imagecreatefromgif( $filename );
            break;
        case 2:
            $srcim = imagecreatefromjpeg( $filename );
            break;
    }
   
    $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 );
   
    switch($filetype)
    {
        case 1:
            imagegif(  $dstim, $newfilename);
            break;
        case 2:
            imagejpeg( $dstim, $newfilename, 85 );
            break;
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
   
    return file_exists($newfilename);
}
Avatar billede tamen Nybegynder
17. november 2005 - 13:12 #2
Tjekker den ud nu.
Avatar billede tamen Nybegynder
17. november 2005 - 13:25 #3
Den fungere fint, den gør bare ikke det jeg vil ha.
Hvis jeg vil have et thumbnail der er 100x17px skal den lave et thumbnail der er 100x17px og ikke et thumbnail af hele billedet der er f.eks. 10x17px

Hvis jeg uploader et billede der er 982x706px og kalder funktionen sådan: resize( $orgfile, $njewfile, 100, 17); får jeg et thumbnail der er 24x17px.

Men ser om jeg kan transmogriffe det om til noget jeg kan bruge.
Avatar billede tamen Nybegynder
17. november 2005 - 13:57 #4
Fandt http://phpthumb.sourceforge.net/ som kan gøre hvad jeg vil have den til.
Her er hvad jeg bruger nu:

$thumb = new phpThumb();
$thumb->config_allow_src_above_docroot = true;
$thumb->setSourceFilename($path.$name);
$thumb->zc = true;
$thumb->w = 200;
$thumb->h = 100;
$thumb->config_output_format = 'jpeg';

$newfile = $path.'p_1_200x17.jpg';
if ($thumb->GenerateThumbnail()) {
  if (!$thumb->RenderToFile($newfile)) {
  // do something with debug/error messages
  echo 'Failed: '.implode("\n", $thumb->debugmessages);
  }
} else {
  // do something with debug/error messages
  echo 'Failed: '.implode("\n", $thumb->debugmessages);
}
Avatar billede jakobdo Ekspert
17. november 2005 - 17:52 #5
Det script du fik før, ville altså ikke lave: 100x17px om til: 10x17px.
Det ville kunne blive: 10x2px.
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