# 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.