Avatar billede dennism Nybegynder
12. januar 2006 - 12:16 Der er 4 kommentarer og
1 løsning

PHP: Metode til resize af billde

Jeg har nogle billeder, som jeg vha. PHP ønsker at resize. Jeg kører med en fast width på 100px, og ønsker at lave et korrekt thumbnail hvor højden passer til denne bredde.

Hvilken beregningsmetode skal jeg bruge til at bestemme hvor meget jeg skal klippe ud.
Jeg har forsøgt mig med:

    copy($_FILES['image']['tmp_name'],"$image_filename");
    list($width, $height) = getimagesize($image_filename);

    $max_size = 100;
    $newwidth = $max_size;
    $f = $width/$max_size;
    $newheight = floor($height/$f);
    $y = round($newheight*$f);

    $thumb = imagecreatetruecolor($newwidth, $newheight);
    $source = imagecreatefromjpeg($image_filename);
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $y);
    imagejpeg($thumb, "$image_filename_thumb");

Men det virker desværre ikke optimalt.
Avatar billede dmdisco Nybegynder
12. januar 2006 - 12:20 #1
du kan kigge lidt på denne funktion og se om det er noget du kan bruge
function image_resize($src,$dest,$maxWidth,$maxHeight,$quality=100) {
      if (file_exists($src)  && isset($dest)) {
          // path info
          $destInfo  = pathInfo($dest);
         
          // image src size
          $srcSize  = getImageSize($src);
         
          // image dest size $destSize[0] = width, $destSize[1] = height
          $srcRatio  = $srcSize[0]/$srcSize[1]; // width/height ratio
          $destRatio = $maxWidth/$maxHeight;
          if ($destRatio > $srcRatio) {
              $destSize[1] = $maxHeight;
              $destSize[0] = $maxHeight*$srcRatio;
          }
          else {
              $destSize[0] = $maxWidth;
              $destSize[1] = $maxWidth/$srcRatio;
          }
         
          // path rectification
          if ($destInfo['extension'] == "gif") {
              $dest = substr_replace($dest, 'jpg', -3);
          }
         
          // true color image, with anti-aliasing
          $destImage = imageCreateTrueColor($destSize[0],$destSize[1]);
          imageAntiAlias($destImage,true);
         
          // src image
          switch ($srcSize[2]) {
              case 1: //GIF
              $srcImage = imageCreateFromGif($src);
              break;
             
              case 2: //JPEG
              $srcImage = imageCreateFromJpeg($src);
              break;
             
              case 3: //PNG
              $srcImage = imageCreateFromPng($src);
              break;
             
              default:
              return false;
              break;
          }
         
          // resampling
          imageCopyResampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1],$srcSize[0],$srcSize[1]);
         
          // generating image
          switch ($srcSize[2]) {
              case 1:
              case 2:
              imageJpeg($destImage,$dest,$quality);
              break;
             
              case 3:
              imagePng($destImage,$dest);
              break;
          }
          return true;
      }
      else {
          return false;
      }
    }
Avatar billede dennism Nybegynder
12. januar 2006 - 12:28 #2
Kan du fortælle mig ideen bag den udregning? Kan ikke umiddelbart gennemskue den.
Avatar billede delwin Nybegynder
12. januar 2006 - 22:01 #3
hvis dit billede er 450 bredt og 700 højt, altså 450*700, og du vil have en fast bredde på 100.. så sig 700/(450/100)=155.xxxxxx

i den kode der står der bare 100/(450/700)=155.xxxxxx i stedet.. det er samme resultat..
Avatar billede dennism Nybegynder
20. januar 2006 - 15:19 #4
Smider du lige et svar?
Avatar billede dmdisco Nybegynder
20. januar 2006 - 19:01 #5
svar
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

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