php

Reducir tamaño de imagen con PHP

En este corto post de programación con PHP te mostraré cómo reducir la calidad de una imagen, comprimir una imagen o simplemente reducir el tamaño de una imagen.

Ciertamente esto no es comprimir, pues comprimir una imagen con PHP sería comprimirla para después verla en su estado original. Lo que haremos será más bien reducir su calidad o tamaño.

Para esto vas a necesitar la librería GD. Aquí puedes verificar si cuentas con ella.

Explicación general

Te mostraré un ejemplo, pero básicamente lo que tienes que hacer es obtener una imagen con imagecreatefromjpeg o imagecreatefrompng. Recuerda que la función que uses dependerá del formato de la imagen.

Una vez que ya has abierto la imagen (puede ser una imagen que el usuario haya subido, dentro de $_FILES o una que ya exista dentro del sistema de archivos) invoca a imagejpeg o imagepng para guardar la imagen. Estas funciones tienen 3 argumentos:

  1. Recurso de la imagen, algo obtenido con imagecreafrompng o imagecreatefromjpeg
  2. Nombre del archivo que se va a guardar
  3. Calidad

Recuerda que igualmente podrías mostrar la imagen en el navegador pasando null como nombre del archivo; verás en los ejemplos.

El argumento importante aquí es la calidad, que va desde 0 hasta 100. Entre mayor sea el número, mayor la calidad pero así también el peso. Pero bueno, vayamos al ejemplo.

Ejemplo 1: comprimir imagen y guardar

Vamos a ver el primer ejemplo. En este caso vamos a tomar una imagen existente en el sistema de archivos, obtenerla y guardarla con el tamaño reducido, todo esto usando PHP.

<?php
$rutaImagenOriginal = "original.jpg";
# La abrimos como un recurso. Nota: uso imagecreatefromjpeg porque es una JPEG, si fuera
# una PNG, usa imagecreatefrompng
$imagenOriginal = imagecreatefromjpeg($rutaImagenOriginal);

# Y la volvemos a guardar usando imagejpeg indicando la calidad como tercer argumento
# Lo mismo, lo hago con imagejpeg porque es JPEG, si fuera PNG ya sabes, ¿cierto?
$rutaImagenComprimida = "comprimida.jpg";
$calidad = 20; // Valor entre 0 y 100. Mayor calidad, mayor peso
imagejpeg($imagenOriginal, $rutaImagenComprimida, $calidad);
printf("La imagen comprimida ha sido guardada en %s", $rutaImagenComprimida);

En mi ejemplo uso una calidad de 20, así que el peso de la imagen se reduce de 329 KB a 52.9 KB.

Segundo ejemplo: reducir tamaño de imagen con PHP y mostrar en el navegador

Como dije anteriormente, puedes mostrar la imagen comprimida en el navegador para que el usuario pueda verla o descargarla:

<?php
$rutaImagenOriginal = "original.jpg";
# La abrimos como un recurso. Nota: uso imagecreatefromjpeg porque es una JPEG, si fuera
# una PNG, usa imagecreatefrompng
$imagenOriginal = imagecreatefromjpeg($rutaImagenOriginal);

$calidad = 20; // Valor entre 0 y 100. Mayor calidad, mayor peso
header("Content-Type: image/jpeg");
imagejpeg($imagenOriginal, null, $calidad);

Probando ejemplo

Solo para terminar el post te mostraré la salida del navegador cuando indico la calidad en 20:

Reducir tamaño de imagen con PHP – Ejemplo de imagen

Con eso terminamos por hoy. Recuerda que puedes leer más sobre PHP en este enlace.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.