Redimensionar imágenes con PHP

Cuando desarrollamos sistemas web o un portal web hacemos uso de imágenes y en ocasiones se debe respetar algún tamaño especifico. En este articulo aprenderemos a redimensionar imágenes con PHP, de forma practica y sencilla.

Hoy en día el tamaño de las imágenes puede variar mucho debido a la calidad de los medios que las generan. En muchas de las ocasiones se generar imágenes muy grandes, lo cual genera lentitud de carga y requiere mayor capacidad de almacenamiento.

A continuación mostraremos algunos ejemplos para redimensionar imágenes.

Redimensión con biblioteca GD

La biblioteca GD está incluida al descargar PHP, para verificar que está habilitada debemos abrir el archivo de configuración php.ini y buscar la linea ;extension=gd, quitamos el punto y coma (;), guardamos el archivo y reiniciamos el servidor web.

Ejemplo simple con GD

En este ejemplo debemos agregar la ubicación y nombre de la imagen original y de la imagen nueva, así como el ancho y alto a redimensionar.

<?php
	$imagen = 'mi_foto.jpg'; //Imagen original
	$imagenNueva = 'mi_foto_resize.jpg'; //Nueva imagen
	$nAncho = 500; //Nuevo ancho
	$nAlto = 700;  //Nuevo alto
	
	//Creamos una nueva imagen a partir del fichero inicial
	$imagen = imagecreatefromjpeg($imagen); 
	//Obtenemos el tamaño 
	$x = imagesx($imagen);
	$y = imagesy($imagen);
	
	// Crear una nueva imagen, copia y cambia el tamaño de la imagen
	$img = imagecreatetruecolor($nAncho, $nAlto);
	imagecopyresized($img, $imagen, 0, 0, 0, 0, $nAncho, $nAlto, $x, $y);
	
	//Creamos el archivo jpg
	imagejpeg($img, $imagenNueva);
?>

Usamos una imagen con extensión jpg, pero soporta otras extensiones, en caso de imágenes png debe cambiar la función imagecreatefromjpeg() a imagecreatefrompng() y imagejpeg() a imagepng(), así mismo se pueden cambiar las funciones para imágenes GIF, entra otras.

El inconveniente de este ejemplo es que agregará los tamaños que asignes sin respetar la relación de aspecto. Por lo cual la imagen se puede deformar.

Ejemplo con GD respetando la relación de aspecto

Este ejemplo es similar al anterior pero aquí obtenemos la relación de aspecto de la imagen y que al redimensionar lo respete. Esto ayuda para que la imagen no se deforme.

<?php
	$imagen = 'mi_foto.jpg'; //Imagen original
	$imagenNueva = 'mi_foto_resize.jpg'; //Nueva imagen
	$nAncho = 600; //Nuevo ancho
	$nAlto = 800;  //Nuevo alto
	//Creamos una nueva imagen a partir del fichero inicial
	
	$imagen = imagecreatefromjpeg($imagen);
	//Obtenemos el tamaño 
	$x = imagesx($imagen);
	$y = imagesy($imagen);
	
	//Validamos los tamaños y calculamos la relación de aspecto
	if ($x >= $y) {
		$nAncho = $maxAncho;
		$nAlto = $nAncho * $y / $x;
		} else {
		$nAlto = $maxAlto;
		$nAncho = $x / $y * $nAlto;
	}
	// Crear una nueva imagen, copia y cambia el tamaño de la imagen
	$img = imagecreatetruecolor($nAncho, $nAlto);
	imagecopyresampled($img, $imagen, 0, 0, 0, 0, floor($nAncho), floor($nAlto), $x, $y);
	
	//Creamos el archivo jpg
	imagejpeg($img, $imagenNueva);
?>

El código que agregamos es para identificar el lado más grande de la imagen y asignarle su nuevo tamaño directamente para el lado pequeño, hacemos un cálculo para determinar la relación de aspecto que tiene la imagen.

Tutorial en vídeo: