Redimensionar imagen con PHP: Ejemplo completo
Redimensionar imagen con PHP. Hoy en día lo primordial es la velocidad de un portal web o sistema web. Por lo tanto, las imágenes deben estar bien optimizadas y estas a su vez deben respetar algún tamaño específico. En este articulo aprenderemos a redimensionar imagen con PHP, algo practico y sencillo para que puedas implementarlo rápidamente y no rendirte en el intento.
En ocasiones desarrollamos sistemas que permitan subir imágenes ya sean para un producto, categoría o quizás para algún articulo periodístico, etc. El primer punto es, que el sistema tenga la posibilidad de optimizar estas imágenes a un tamaño preciso.
REDIMENSIONAR IMAGEN CON PHP: DOS FORMAS
Recordemos que los usuarios subirán cualquier tamaño de imagen sin importar las recomendaciones dadas por los administradores. En ese momento, entra a tallar el sistema desarrollado.
¿Qué problemas encuentras los sistemas a la hora de subir imágenes?
Según estudios y análisis, el problema más común en estas situaciones es que al final tendremos almacenadas miles de imágenes con proporciones y tamaños fuera de rango, esta a su vez genera lentitud de carga en nuestro sistema y/o página web por las imágenes muy pesadas.
A continuación, brindaremos dos formas para poder redimensionar una imagen.
a) Primera Forma: Usando Clase PHP
Este va a ser nuestra primera opción y vamos a subir una imagen al servidor y posteriormente redimensionar al 50% el tamaño original de la imagen subida. Para este ejemplo no usaremos base de datos.
Además, usaremos la librería class.upload.php
para redimensionar las imágenes subidas al servidor.
¿Qué recursos necesito para este ejemplo?
Necesitaremos 3 recursos y son los siguientes:
- Un Formulario para subir imágenes
- Fichero upload.php. – Para el procesamiento de imágenes
- Uso de la Librería class.upload.php
¿Como instalar el Script?
Para instalar y ejecutar el script solo debemos de subir los archivos al servidor web y ejecutarlo. Sin embargo, es posible que este limitado a 2MB la subida de imágenes, por consiguiente, ustedes pueden modificarlo vía el fichero php.ini
o si están usando un hosting compartido podrían usar el (.user.ini
), caso contrario vía el fichero .htaccess
también pueden incrementar el tamaño de subida.
ESTRUCTURA DEL SCRIPT
1) Index.php: Subir ficheros
Su función será de mostrar un formulario HTML5 y enviar la imagen al fichero upload.php
que se encargará de procesarlo.
2) Fichero upload.php
Este fichero cumple un rol fundamental en el ejemplo:
- Sera el encargado de llamar a la librería
- Subir las imágenes al servidor
- Redimensionar las imágenes subidas a través de la clase upload
<?php include "class.upload.php"; if(isset($_FILES["image"])){ $up = new Upload($_FILES["image"]); $correct= false; if($up->uploaded){ $up->Process("uploads/"); if($up->processed){ $up->image_resize = true; $up->image_x = $up->image_src_x/2; $up->image_ratio_y = true; $up->jpeg_quality = 50; $up->Process("uploads2/"); if($up->processed){ $correct = true; } } } } ?>
Resultado en el navegador
b) Segunda Forma: Usando PHP IMAGICK
En esta segunda forma tenemos que asegurarnos que nuestra versión de PHP Posea la librería ImageMagick. Ya que, sin este componente no funcionara el ejemplo.
Redimensionar una imagen con PHP sin perder calidad
La calidad de la imagen es algo fundamental en todo proyecto web y redimensionar también. Sin embargo, en este ejemplo explicaremos como redimensionar una imagen con PHP sin perder calidad.
Vamos a explicar la manera correcta de redimensionar una imagen con ayuda del lenguaje PHP, con solo algunas líneas de código. Además, lo más importante que la imagen no sea PIXELADA.
¿Como lograremos redimensionar sin perder la calidad?
El primer paso es usar la Librería de PHP IMAGICK (Image magic), la cual viene incluida en el propio PHP a partir de la versión 5.1.3 o superior.
Como segundo paso debemos asegurarnos que nuestro servidor donde tengamos almacenada la web tenga esta librería activada. Por lo tanto, muchos servidores locales no la traen y esto provoca errores cuando ejecutamos la redimensión.
¿Cuáles son los requisitos para que este script funcione muy bien?
Antes de seguir con el proceso de redimensión es que la imagen que deseamos procesar debe estar en nuestro servidor web, previamente subida. Sin embargo, esto lo podemos solucionar subiendo el fichero al servidor mediante un formulario y PHP.
Códigos del ejemplo
<?php // Creamos la variable que contiene la imagen // Uso de la librería imagick $im = new imagick("01.jpg"); $imageprops = $im->getImageGeometry(); // reconocimiento de la altura y ancho de la imagen $width = $imageprops['width']; $height = $imageprops['height']; // Nueva altura y ancho if($width > $height){ $newHeight = 280; $newWidth = (280 / $height) * $width; }else{ $newWidth = 280; $newHeight = (280 / $width) * $height; } $im->resizeImage($newWidth,$newHeight, imagick::FILTER_LANCZOS, 0.9, true); $im->cropImage (280,280,0,0); // Escribimos la nueva imagen redimensionada $im->writeImage( "01_280x280_test.jpg" ); // Impresion en el navegador de la imagen echo '<img src="01_280x280_test.jpg">'; ?>
Vista previa del resultado
CONCLUSIÓN: Redimensionar imagen con PHP
En este articulo hemos explicado dos formas para procesar imagen y obtener una redimensión acorde con las necesidades de nuestro proyecto.
La primera opción fue reducir al 50% la imagen, recordemos que los usuarios suelen subir imagen de 4500×3500 o superior lo que ocasiona el alto consumo de ancho de banda y lentitud a la hora de cargar una página web.
Por otro lado, la opción dos fue usando una librería imagick, si nuestro hosting no tiene activada, debemos de solicitarlo mediante ticket de soporte, caso contrario si estas en un servidor local, puedes instalarlo tú mismo.
Espero que esta breve explicación les ayude en sus proyectos web.
Descargar: Redimensionar imagenes usando PHP
Hola Nestor, como va ?
Estoy tratando de armar lo siguiente:
Tengo un formulario para subir una foto a un database.
Le quiero agregar la opcion de poner 2 campos para especificar si quiero redimensionar la foto manteniendo la proporcion
ancho [ ] o alto [ ] completo una de las 2 dimensiones, la foto se redimensiona y se guarda en el campo longblob deseado
El tema es que los ejemplo que encontre para redimensionar lo hacen desde un archivo con la ruta o directorio.
Cuando recibo la foto del campo tipo file y la quiero redimensionar asignandola a una variable, la pierdo.
Tendras algun ejemplo ? gracias
saludos muy buen aporte pero tengo una duda si lo que quisiera es dimensional en un tamaño especifico y no por porcentaje como debería hacerlo?
gracias por este tutorial y la dedicación.
muy fácil de entender
felicitaciones
Hola Jhon,
Gracias por tu comentario, encantado de que el tutorial te haya servido.
Con este ejemplo se puede hacer que guarde no con el nombre que tenga la imagen sino por ejemplo la fecha por nombre o algo asi?