ridimensionare immagini con GD

come faccio a ridimensionare le immagini per creare delle thumbs con le GD?

inviato 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ti basta usare la funzione imagecopyresampled. Trovi due esempi sulla documentazione ufficiale:

http://it2.php.net/manual/en/function.imagecopyresampled.php

Esiste anche la funzione imagecopyresized ma da i risultati sono di qualità inferiore pertanto ti sconsiglio di usarla.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

hm come installo gd in locale??? [ho winzozz] e con php 5 non c'èra[anche se dovrebbe essere compresa ]

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

devi andare nel php.ini e decommentare (togliere il punto e virgola iniziale) la riga ;extension=php_gd2.dll

Ovviamente riavvia Apache.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ti passo una bella funzioncina, ma non dirlo in giro:

//-----------------------------------------------------------------
//funzione che salva la foto e ritorna il nome con cui l'ha salvata
function salvaFoto($foto,$foto_nome,$path,$max,$meth,$quality)
{
   $image = $path . $foto_nome;
   copy($foto, $image);
   // controllo le dimensioni
   $filesize = filesize($image);
   $imagesize = @getimagesize($image);
   //echo "<br>max:" . $imagesize[0];
   //echo "----------------------------";
   if ($imagesize == null){
      $ERROR = "'$image' non è un immagine !";
      @unlink($image);
   }else{
      if(max($imagesize[0],$imagesize[1]) > $max){
         //echo "ciao";
         resize_image($image, $image, $max, $meth, $quality);
      }
   }
   return $image;
}

define("GIS_GIF",     1);
define("GIS_JPG",     2);
define("GIS_PNG",     3);

// Resize an image

function resize_image($src_file, $dest_file, $new_size, $method, $quality)
{
   global $CONFIG, $ERROR;
   $imginfo = @getimagesize($src_file);
   if ($imginfo == null)
      return false;

   // GD can only handle JPG & PNG images
   if ($imginfo[2] != GIS_JPG && $imginfo[2] != GIS_PNG && ($method == 'gd1' || $method == 'gd2'))
   {
      $ERROR = "Quando usi GD gli unici standard permessi sono JPEG e PNG.";
      return false;
   }

   // height/width
   $srcWidth = $imginfo[0];
   $srcHeight = $imginfo[1];

   $ratio = max($srcWidth, $srcHeight) / $new_size;
   $ratio = max($ratio, 1.0);
   $destWidth = (int)($srcWidth / $ratio);
   $destHeight = (int)($srcHeight / $ratio);

   // Method for thumbnails creation
   switch ($method) {
   case "im" :
      // 'Escape shell arguments' is mandatory under Unix but confuses windows
      if (preg_match("/\A[a-z]:/i",__FILE__)){
         $src_file =   '"'.$src_file.'"';
         $im_dest_file = str_replace('%', '%%', ('"'.$dest_file.'"'));
      } else {
         $src_file =   escapeshellarg($src_file);
         $im_dest_file = str_replace('%', '%%', escapeshellarg($dest_file));
      }
      
      //exec ("convert -quality $quality -antialias -geometry {$destWidth}x{$destHeight} $src_file $im_dest_file");
      exec ("convert -quality 40 -antialias -geometry {$destWidth}x{$destHeight} $src_file $im_dest_file");
      break;

   case "gd1" :
      if ($imginfo[2] == GIS_JPG)
         $src_img = @imagecreatefromjpeg($src_file);
      else 
         $src_img = @imagecreatefrompng($src_file);
      if (!$src_img){
         $ERROR = "L'immagine non è valida !";
         @unlink($src_file);
         return false;
      }
      $dst_img = imagecreate($destWidth, $destHeight);
      imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $destWidth, (int)$destHeight, $srcWidth, $srcHeight);
      imagejpeg($dst_img, $dest_file, $quality);
      imagedestroy($src_img);
      imagedestroy($dst_img);
      break;

   case "gd2" :
      if ($imginfo[2] == GIS_JPG)
         $src_img = @imagecreatefromjpeg($src_file);
      else 
         $src_img = @imagecreatefrompng($src_file);
      if (!$src_img){
         $ERROR = "L'immagine non è valida !!";
         @unlink($src_file);
         return false;
      }
      $dst_img = imagecreatetruecolor($destWidth, $destHeight);
      imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $destWidth, (int)$destHeight, $srcWidth, $srcHeight);
      imagejpeg($dst_img, $dest_file, $quality);
      imagedestroy($src_img);
      imagedestroy($dst_img);
      break;
   }

   // We check that the image is valid
   $imginfo = @getimagesize($dest_file);
   if ($imginfo == null){
      $ERROR = "Non è stato possibile ridimensionare l'immagine !";
      @unlink($src_file);
      return false;
   } else {
      return true;
   }
}

 :D

risposto 10 anni fa
Xscratch
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda