Trabajo con imágenes en PHP: resize, crop (redimensionamiento y recorte)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en PHP: cambio de tamaño y recorte (resize, crop)



El procesamiento de imágenes es una de las tareas más comunes en el desarrollo de aplicaciones web. Carga de avatares, creación de miniaturas, adaptación de imágenes a diferentes resoluciones de pantalla: todo esto requiere cambio de tamaño (resize) y recorte (crop). En PHP, existen dos herramientas principales para estos fines: la extensión integrada GD y la biblioteca más potente Imagick. En este artículo, analizaremos ambos enfoques con ejemplos prácticos.



1. Extensión GD (herramienta estándar)



GD es la extensión más popular y accesible para trabajar con imágenes. Está integrada en la mayoría de las distribuciones de PHP y no requiere instalación adicional. GD admite los formatos principales: JPEG, PNG, GIF, WebP.



1.1. Cambio de tamaño (resize) manteniendo la proporción



La tarea clásica es reducir una imagen grande a un ancho determinado, manteniendo la relación de aspecto. A continuación se muestra un ejemplo de una función que escala la imagen al ancho especificado.



<?phpfunction resizeImage($srcFile, $destFile, $newWidth) {    // Obtenemos información de la imagen original    list($width, $height, $type) = getimagesize($srcFile);

// Calculamos la nueva altura proporcionalmente $ratio = $width / $height; $newHeight = $newWidth / $ratio;

// Creamos un lienzo para la nueva imagen $srcImage = imagecreatefromjpeg($srcFile); // para JPEG $destImage = imagecreatetruecolor($newWidth, $newHeight);

// Copiamos y redimensionamos imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// Guardamos el resultado imagejpeg($destImage, $destFile, 90); // calidad 90%

// Liberamos memoria imagedestroy($srcImage); imagedestroy($destImage);}

// Ejemplo de usoresizeImage('photo.jpg', 'photo_thumb.jpg', 300);?>


Para trabajar con PNG o GIF, es necesario usar las funciones imagecreatefrompng() y imagecreatefromgif(), así como guardar mediante imagepng() o imagegif().



1.2. Recorte de imagen (crop) centrado



A menudo se requiere no solo reducir, sino recortar un área cuadrada del centro de la imagen. Esto se llama crop centrado.



<?phpfunction cropCenter($srcFile, $destFile, $cropSize) {    list($width, $height, $type) = getimagesize($srcFile);

// Determinamos las coordenadas para recortar el cuadrado del centro $srcX = ($width - $cropSize) / 2; $srcY = ($height - $cropSize) / 2;

// Si la imagen es más pequeña que el tamaño requerido, simplemente escalamos if ($width < $cropSize || $height < $cropSize) { $ratio = min($cropSize / $width, $cropSize / $height); $newWidth = $width * $ratio; $newHeight = $height * $ratio; $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); // Rellenamos con fondo blanco $white = imagecolorallocate($destImage, 255, 255, 255); imagefill($destImage, 0, 0, $white); // Copiamos centrando imagecopyresampled($destImage, $srcImage, ($cropSize - $newWidth) / 2, ($cropSize - $newHeight) / 2, 0, 0, $newWidth, $newHeight, $width, $height); } else { $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); imagecopyresampled($destImage, $srcImage, 0, 0, $srcX, $srcY, $cropSize, $cropSize, $cropSize, $cropSize); }

imagejpeg($destImage, $destFile, 90); imagedestroy($srcImage); imagedestroy($destImage);}

// Ejemplo: cuadrado de 200x200 desde el centrocropCenter('photo.jpg', 'photo_cropped.jpg', 200);?>


2. Biblioteca Imagick (herramienta avanzada)



Imagick es un envoltorio de PHP para la potente utilidad ImageMagick. Ella pre

Recommendations