# Redimensionador de imágenes
## Descripción
Este proyecto permite subir varias imágenes desde un navegador, redimensionarlas a un tamaño fijo y guardarlas en una carpeta de salida.
La imagen final se ajusta a una resolución de `1446 x 900` sin deformarse, manteniendo su proporción original.
---
## ¿Qué hace?
- Recibe imágenes por medio de un formulario HTML.
- Verifica si se enviaron archivos correctamente.
- Crea una carpeta de destino si no existe.
- Mueve cada imagen al servidor.
- Detecta si el archivo es JPG o PNG.
- Redimensiona la imagen manteniendo su proporción.
- Guarda la versión procesada en `imagenes_procesadas/`.
- Muestra mensajes de éxito o error.
---
## Archivos del proyecto
- `index.html` — formulario para subir las imágenes.
- `procesar_imagenes.php` — procesa y redimensiona las imágenes.
- `imagenes_procesadas/` — carpeta donde se guardan las imágenes finales.
---
## Código principal
html
```html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Subir Imágenes</title>
</head>
<body>
<h1>Subir Imágenes</h1>
<form action="procesar_imagenes.php" method="post" enctype="multipart/form-data">
<input type="file" name="imagenes[]" multiple accept="image/jpeg, image/png">
<button type="submit">Subir Imágenes</button>
</form>
</body>
</html>
```
```php
<?php
$ancho_deseado = 1446;
$alto_deseado = 900;
$carpeta_destino = 'imagenes_procesadas/';
if (!is_dir($carpeta_destino)) {
mkdir($carpeta_destino, 0777, true);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['imagenes'])) {
foreach ($_FILES['imagenes']['tmp_name'] as $key => $tmp_name) {
$archivo_original = $_FILES['imagenes']['name'][$key];
$archivo_temporal = $_FILES['imagenes']['tmp_name'][$key];
$nombre_archivo_normalizado = strtolower(basename($archivo_original));
$archivo_destino = $carpeta_destino . $nombre_archivo_normalizado;
if (move_uploaded_file($archivo_temporal, $archivo_destino)) {
if (!file_exists($archivo_destino)) {
echo "El archivo no se pudo mover: $archivo_destino.<br>";
continue;
}
$tipo_imagen = exif_imagetype($archivo_destino);
switch ($tipo_imagen) {
case IMAGETYPE_JPEG:
$imagen = @imagecreatefromjpeg($archivo_destino);
break;
case IMAGETYPE_PNG:
$imagen = @imagecreatefrompng($archivo_destino);
break;
default:
echo "Tipo de imagen no soportado para el archivo $archivo_original.<br>";
continue 2;
}
if ($imagen === false) {
echo "Error al crear la imagen desde el archivo $archivo_destino.<br>";
continue;
}
$ancho_original = imagesx($imagen);
$alto_original = imagesy($imagen);
$imagen_redimensionada = imagecreatetruecolor($ancho_deseado, $alto_deseado);
if ($tipo_imagen == IMAGETYPE_PNG) {
imagealphablending($imagen_redimensionada, false);
imagesavealpha($imagen_redimensionada, true);
$transparente = imagecolorallocatealpha($imagen_redimensionada, 0, 0, 0, 127);
imagefill($imagen_redimensionada, 0, 0, $transparente);
} else {
$blanco = imagecolorallocate($imagen_redimensionada, 255, 255, 255);
imagefill($imagen_redimensionada, 0, 0, $blanco);
}
$factor = min($ancho_deseado / $ancho_original, $alto_deseado / $alto_original);
$nuevo_ancho = $ancho_original * $factor;
$nuevo_alto = $alto_original * $factor;
$x = ($ancho_deseado - $nuevo_ancho) / 2;
$y = ($alto_deseado - $nuevo_alto) / 2;
imagecopyresampled($imagen_redimensionada, $imagen, $x, $y, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho_original, $alto_original);
switch ($tipo_imagen) {
case IMAGETYPE_JPEG:
imagejpeg($imagen_redimensionada, $archivo_destino);
break;
case IMAGETYPE_PNG:
imagepng($imagen_redimensionada, $archivo_destino);
break;
}
imagedestroy($imagen);
imagedestroy($imagen_redimensionada);
echo "Imagen $archivo_original procesada correctamente.<br>";
} else {
echo "No se pudo mover el archivo $archivo_original.<br>";
}
}
echo "Todas las imágenes han sido procesadas.";
} else {
echo "No se han enviado imágenes.";
}
?>
```
---
## Importante
- Solo acepta imágenes JPG y PNG.
- La carpeta `imagenes_procesadas` debe tener permisos de escritura.
- La extensión GD de PHP debe estar habilitada en el servidor.
---
## Resultado
Con este proyecto puedes subir imágenes y obtener versiones con un formato uniforme listo para usar en una web o galería.