Redimensionar imágenes con PHP A continuación mostraremos cómo redimensionar imágenes automáticamente utilizando la librería GD de PHP.
Para que todo funcione correctamente, necesitamos tener instalada en nuestro servidor la versión 2.0.1 o superior de dicha librería, que puede descargarse gratuitamente desde
http://www.boutell.com.
Primero crearemos un archivo al que llamaremos redimensionar.php, que contendrá el siguiente código:
<?php
$anchura=180;
$hmax=180;
$nombre=basename($_GET['imagen']);
$datos = getimagesize($nombre);
if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if($datos[2]==3){$img = @imagecreatefrompng($nombre);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>
$anchura y $hmax son respectivamente el ancho y el alto máximo que definimos para la imagen que queremos mostrar.
La función getimagesize genera, al ser invocada, un array que contiene en cada uno de sus índices los siguientes datos de la imagen que recibe como parámetro:
[0]=ancho
[1]=alto
[2]=tipo de imagen (1:gif,2:jpg,3
ng)
Las funciones imagecreatefromjpeg,imagecreatefromgif,imagecreatefrompng devuelven un identificador de imagen que representa la imagen obtenida desde el nombre de archivo pasado por parámetro.
La función imagecreatetruecolor crea una imagen nueva en color real (true color) y devuelve un identificador de imagen representando una imagen en blanco de tamaño anchura por altura.
Por último, imagecopyresampled() copia una porción rectangular de una imagen sobre otra, suavizando los valores de los píxeles mediante interpolación, de forma que al reducir el tamaño de una imagen aún mantiene una buena claridad. imagecopyresampled debe incluir –dentro del paréntesis– estos parámetros (en este orden):
$thumb que es el identificador de la imagen destino, es decir el papel fotográfico que hemos creado con imagecreatetruecolor.
$img que es el identificador de la imagen original (negativo) obtenido con imagecreatefromjpeg o imagecreatefromgif o imagecreatefrompng.
Xd e Yd son las coordenadas de un punto situado en la esquina superior izquierda del papel a partir del que queremos que se impresione la imagen. Si queremos una imagen sin márgenes pondremos 0,0 y, si queremos dejar márgenes en blanco, habrá que poner los anchos de esos márgenes (izquierdo y superior) respectivamente.
Xf e Yf nos servirán para reencuadrar la foto original recortando por la izquiera y por arriba, respectivamente, los anchos que se indiquen aquí en pixels.
$anchura y $altura, como dijimos antes, son respectivamente el ancho y el alto máximo que definimos para la imagen que queremos mostrar.
Fx e Fy indican el ancho y el alto de la porción del original que tratamos de reproducir.
Con header("Content-type: image/gif") e imagegif($thumb) (o jpeg o png, según sea el caso) mostramos la imagen y con imagedestroy($thumb)liberamos la memoria asociada a la imagen.
Para utilizar la imagen, deberemos llamarla de la siguiente manera:
<img src='redimensionar.php?imagen=tu_imagen_origunal.jpg'>