Código PHP:
<?php
//En el primer parámetro introducimos la dirección donde está la imagen que queremos redimensionar.
//Algunos servidores permiten que sea una URL aunque muchos no lo permiten.
//En el segundo parámetro escribimos el nombre que queremos poner a la nueva imágen.
//Aquí ten cuidado con la extensión, tienes que poner la misma que la imagen original (jpg, gif o png)
function redimensionar_imagen($imagen, $nombre_imagen_asociada)
{
$nuevo_ancho=150; //valores que se pueden cambiar
$nuevo_alto=100; //por ejemplo
$directorio=""; //por si se quiere alojar en algun directorio determinado
//Recojo información de la imágen
$info_imagen = getimagesize($imagen);
$alto = $info_imagen[1];
$ancho = $info_imagen[0];
$tipo_imagen = $info_imagen[2];
//Determino las nuevas medidas en función de los límites
if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
{
if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
{
$nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ;
}
else
{
$nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);
}
}
else //si la imagen es más pequenia que los límites la dejo igual.
{
$nuevo_alto = $alto;
$nuevo_ancho = $ancho;
}
// dependiendo del tipo de imagen tengo que usar diferentes funciones
switch ($tipo_imagen) {
case 1: //si es gif …
$imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
$imagen_vieja = imagecreatefromgif($imagen);
//cambio de tamaño…
imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
break;
case 2: //si es jpeg …
$imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
$imagen_vieja = imagecreatefromjpeg($imagen);
//cambio de tamaño…
imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
break;
case 3: //si es png …
$imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
$imagen_vieja = imagecreatefrompng($imagen);
imageAlphaBlending($imagen_nueva, false);
imageSaveAlpha($imagen_nueva, true);
//cambio de tamaño…
imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false;
break;
}
return true; //si todo ha ido bien devuelve true
}
?>
Esta funcion es d elo mejorcito para hacer tumbs y no emplear muchos recursos en realizarlo.
De todos modos y postee los problemas ue presenta la libreria GD en su ultima version.
Lo mas importante a valorar en el aspecto de usar GD es si las imagenes que se van a redimensionar las suben usuarios de la web(cualquiera), o las subes tu.
Si eres tu el que las sube no creo que haya problema, pero si las imagenes provienen de distintas camaras de foros, moviles, .... algunas pueden presentar fayos que no asume la libreria GD, en ese caso seria recomendable usar imagemagick para este tipo de cosas