Avatar billede bad24 Nybegynder
28. december 2006 - 18:51 Der er 10 kommentarer

hjælp til GD-lib (thumbnails) script

Hejsa, jeg har fundet et script der laver thumnails, problemet er dog at den overskriver det originale billede, som den ikke skal.

Hvordan ændre jeg det ?

Scriptet ser sådan her ud:
<?
/**********************************************************
* function resizejpeg:
*
*  = creates a resized image based on the max width
*    specified as well as generates a thumbnail from
*    a rectangle cut from the middle of the image.
*
*    @dir    = directory image is stored in
*    @newdir = directory new image will be stored in
*    @img    = the image name
*    @max_w  = the max width of the resized image
*    @max_h  = the max height of the resized image
*    @th_w  = the width of the thumbnail
*    @th_h  = the height of the thumbnail
*
**********************************************************/

function resizejpeg($dir, $newdir, $img, $max_w, $max_h, $th_w, $th_h)
{
  // set destination directory
  if (!$newdir) $newdir = $dir;

  // get original images width and height
  list($or_w, $or_h, $or_t) = getimagesize($dir.$img);

  // make sure image is a jpeg
  if ($or_t == 2) {
 
      // obtain the image's ratio
      $ratio = ($or_h / $or_w);

      // original image
      $or_image = imagecreatefromjpeg($dir.$img);

      // resize image?
      if ($or_w > $max_w || $or_h > $max_h) {

          // resize by height, then width (height dominant)
          if ($max_h < $max_w) {
              $rs_h = $max_h;
              $rs_w = $rs_h / $ratio;
          }
          // resize by width, then height (width dominant)
          else {
              $rs_w = $max_w;
              $rs_h = $ratio * $rs_w;
          }

          // copy old image to new image
          $rs_image = imagecreatetruecolor($rs_w, $rs_h);
          imagecopyresampled($rs_image, $or_image, 0, 0, 0, 0, $rs_w, $rs_h, $or_w, $or_h);
      }
      // image requires no resizing
      else {
          $rs_w = $or_w;
          $rs_h = $or_h;

          $rs_image = $or_image;
      }

      // generate resized image
      imagejpeg($rs_image, $newdir.$img, 100);

      $th_image = imagecreatetruecolor($th_w, $th_h);

      // cut out a rectangle from the resized image and store in thumbnail
      $new_w = (($rs_w / 2) - ($th_w / 2));
      $new_h = (($rs_h / 2) - ($th_h / 2));

      imagecopyresized($th_image, $rs_image, 0, 0, $new_w, $new_h, $rs_w, $rs_h, $rs_w, $rs_h);

      // generate thumbnail
      imagejpeg($th_image, $newdir.'thumb_'.$img, 100);

      return true;
  }

  // Image type was not jpeg!
  else {
      return false;
  }
}
?>

mvh.
Lars N.
Avatar billede allanrbo Nybegynder
28. december 2006 - 19:07 #1
Hvordan ser linjen du bruger til at kalde din resizejpeg-funktion ud? Husker at du gøre $dir forskellig fra $newdir (altså den første og den anden parameter)?
Avatar billede bad24 Nybegynder
28. december 2006 - 19:56 #2
Hej allan,

filen ser sådan her ud:

<?php
require 'thumbnail.php';
$dir = '/home/beta/public_html/test/';
$newdir = '/home/beta/public_html/test/new/';
$img = 'test.jpg';

resizejpeg($dir, $newdir, $img, 400, 200, 100, 100);
?>

Havde glemt det med newdir, men nu gemmer den en thumbnail og der billede der overskrev det originale i new/

Men jeg mangler som sagt kun thumbnail billedet :)
Avatar billede coderdk Praktikant
28. december 2006 - 20:27 #3
Du kunne også:

<?php

    function resize( $filename, $newfilename, $maxw, $maxh )
    {
        $srcim = imagecreatefromjpeg( $filename );
        $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 );
        imagejpeg( $dstim, $newfilename, 85 );
        imagedestroy( $dstim );
        imagedestroy( $srcim );
    }

    resize( "'/home/beta/public_html/test/test.jpg", "'/home/beta/public_html/test/new/test.jpg", 400, 200 );
    resize( "'/home/beta/public_html/test/new/test.jpg", "'/home/beta/public_html/test/new/thumb_test.jpg", 100, 100 );

?>
Avatar billede bad24 Nybegynder
28. december 2006 - 21:27 #4
coderdk producere det kun et thumb billede eller? (og bliver det skaleret)?
Avatar billede bad24 Nybegynder
28. december 2006 - 21:41 #5
mente ikke skaleret, men altså. Det script jeg selv postede klippet/cropper billedet til, som jeg gerne vil have det. Men ønsker som sagt kun den éne fil.
Avatar billede coderdk Praktikant
28. december 2006 - 22:19 #6
Ok, koden jeg postede resizer til max 400x200 og laver derefter en thumb på max 100x100 - begge dele med oprindelige proportioner (derfor "max")
Avatar billede bad24 Nybegynder
28. december 2006 - 22:48 #7
men er det ikke muligt, at slette den ene fil efter den er færdig, eller gør så den kun er temporary?
Avatar billede coderdk Praktikant
28. december 2006 - 22:59 #8
Du kan tilmed nøjes med kun at lave den ene ;) som du kan se har jeg to linjer hvor jeg kalder resize() - du kan også slette den oprindelige hvis du vil, med unlink()
Avatar billede bad24 Nybegynder
29. december 2006 - 00:55 #9
hvordan kan jeg tilføje unlink til den kode jeg selv postede? :)
Avatar billede coderdk Praktikant
29. december 2006 - 00:58 #10
Syntaksen er: unlink("filnavn"); så  det må vel være unlink($dir.$img) eller unlink($newdir.$img) ?
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