[PHP] redimensionner une image

voici une fonction pour redimensionner une image, si l'image est plus petite que la taille demandée, on ne fait rien :

function _resizeImage( $tmpname, $w, $h, $save_dir, $save_name)
  {
    $save_dir      .= (substr($save_dir,-1) != "/") ? "/" : "";
    $img_src_chemin = $tmpname;
    $img_dst_chemin = $save_dir.$save_name;
    $extension = strtolower(substr($img_src_chemin, -3));
    
    switch ( $extension ) {
      case "jpg":
      case "peg": //pour le cas où l'extension est "jpeg"
        $img_src_resource = imagecreatefromjpeg( $img_src_chemin );
        break;

      case "gif":
        $img_src_resource = imagecreatefromgif( $img_src_chemin );
        break;

      case "png":
        $img_src_resource = imagecreatefrompng( $img_src_chemin );
        break;

      default:
        $img_src_resource = imagecreatefromjpeg( $img_src_chemin );
    }

    $img_src_width  = imagesx( $img_src_resource );
    $img_src_height = imagesy( $img_src_resource );

    //preserver les dimensions
    $rapport = $img_src_width / $img_src_height;
    if($rapport > 1) {
      $h = intval($h / $rapport);
    } else {
      $w = intval($w * $rapport);
    }

    //si image plus petite que ce qu'on veut (si on veut agrandir une image, il faudra enlever cette partie)
    if($img_src_width <= $w && $img_src_height <= $h) {
      rename($img_src_chemin, $img_dst_chemin);
      return;
    }

    $img_dst_resource = imagecreatetruecolor($w, $h);
    $white = imagecolorallocate($img_dst_resource, 255, 255, 255); //ici on veut un fond blanc (noir par défaut)
    imagefilledrectangle($img_dst_resource, 0, 0, $w, $h, $white);

    imagecopyresampled($img_dst_resource, $img_src_resource, 0, 0, 0, 0, $w, $h, $img_src_width, $img_src_height);

    switch ( $extension ) {
      case "jpg":
      case "peg":
        imagejpeg($img_dst_resource, $img_dst_chemin);
        break;

      case "gif":
        imagegif($img_dst_resource, $img_dst_chemin);
        break;

      case "png":
        imagepng($img_dst_resource, $img_dst_chemin);
        break;

      default:
        imagejpeg($img_dst_resource, $img_dst_chemin);
    }

    //on supprime l'image source
    unlink($img_src_chemin);
  }

exemple d'utilisation :

$this->_resizeImage(
            $_FILES['totot']['temp_name'], //de mémoire^^
           150,
           150,
           "/var/www/html/uploads/",
          "thumbnail.jpg"
);

categorie: