Hay varias alternativas ya disponibles en el medio. Antes de poner en funcionamiento el que yo propongo, pueden probar algunos de los que ya existen en el medio.
Código de la función para hacer la redimensión:
public function redimensionar_imagen($nombreimg, $rutaimg, $xmax, $ymax){
$ext = explode(".", $nombreimg);
$ext = $ext[count($ext)-1];
if($ext == "jpg" || $ext == "jpeg")
$imagen = imagecreatefromjpeg($rutaimg);
elseif($ext == "png")
$imagen = imagecreatefrompng($rutaimg);
elseif($ext == "gif")
$imagen = imagecreatefromgif($rutaimg);
$x = imagesx($imagen);
$y = imagesy($imagen);
if($x <= $xmax && $y <= $ymax){
//return "<center>Esta imagen ya esta optimizada para los maximos que deseas.<center>";
return $imagen;
}
if($x >= $y) {
$nuevax = $xmax;
$nuevay = $nuevax * $y / $x;
}
else {
$nuevay = $ymax;
$nuevax = $x / $y * $nuevay;
}
$img2 = imagecreatetruecolor($nuevax, $nuevay);
imagecopyresized($img2, $imagen, 0, 0, 0, 0, floor($nuevax), floor($nuevay), $x, $y);
//return "<center>La imagen se ha optimizado correctamente.</center>";
return $img2;
}
Y para llamar la función:
$nombre='imagen1';
$Path='img/section/immagen.jpg';
$alto=450;
$ancho=450;
$imagen_optimizada = $f->redimensionar_imagen($nombre, $Path, $alto, $ancho);
Sólo es llamar la función y pasarle los parámetros de Nombre, ruta física del archivo en el servidor, alto y ancho deseados al final.