En este tutorial, te enseñaré cómo generar miniaturas (thumbnails) de todas las imágenes dentro de un directorio en tu aplicación Spring Boot, utilizando la poderosa biblioteca Thumbnailator.
Requisitos
- Tener un proyecto Spring Boot configurado.
- Haber configurado Maven como sistema de dependencias.
Paso 1: Agregar la dependencia Thumbnailator
Lo primero es agregar la dependencia a tu archivo pom.xml
:
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.20</version>
</dependency>
Esto descargará la biblioteca Thumbnailator, que es increíblemente fácil de usar para manipular imágenes en Java.
Paso 2: Crear un controlador para procesar las imágenes
El siguiente paso es crear un controlador en Spring Boot que recorra un directorio de imágenes y genere miniaturas de todas las imágenes en otro directorio.
package com.example.demo.controller;
import java.io.File;
import java.io.IOException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import net.coobird.thumbnailator.Thumbnails;
@RestController
public class HomeController {
Logger log = LogManager.getLogger(HomeController.class);
@GetMapping("/")
public String homepage(Model model) {
String INPUT_PATH = "/home/itinajero/Downloads/fotografias";
String OUTPUT_PATH = "/home/itinajero/Downloads/fotografias/thumbnails/";
File inputDir = new File(INPUT_PATH);
File[] files = inputDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".jpg") || name.toLowerCase().endsWith(".png"));
if (files != null) {
for (File file : files) {
try {
log.info("Procesando archivo: " + file.getName());
//Thumbnails.of(new File(INPUT_PATH, file.getName())).size(600, 500).toFile(new File(OUTPUT_PATH, file.getName()));
// Genera un thumbnail para cada archivo en el directorio
Thumbnails.of(file).scale(0.5).toFile(new File(OUTPUT_PATH, file.getName()));
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
log.info("No se encontraron imágenes en el directorio.");
}
return "ok";
}
}
Explicación del código:
- Directorio de entrada y salida:
- INPUT_PATH: es el directorio donde se encuentran las imágenes originales.
- OUTPUT_PATH: es el directorio donde se guardarán las miniaturas generadas.
- Filtro de archivos: Usamos listFiles con un filtro que selecciona archivos con las extensiones .jpg o .png.
- Generación de miniaturas: Utilizamos Thumbnails.of(file).scale(0.5).toFile(new File(OUTPUT_PATH, file.getName())) para crear una versión reducida de cada imagen, con un 50% del tamaño original.
- Logging: Utilizamos log.info() para registrar el progreso mientras se procesan las imágenes.
Paso 3: Prueba la aplicación
Cuando accedas a la URL raíz (/
) de tu aplicación, este código recorrerá todas las imágenes en el directorio de entrada, generará miniaturas y las guardará en el directorio de salida.
2024-10-07T15:24:49.692-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: 9UOL4RMZB881WH92.jpg
2024-10-07T15:24:50.513-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: HW5VA528LJBS9F67.jpg
2024-10-07T15:24:51.325-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: NGFGMIPXS5SD6U1K.jpg
2024-10-07T15:24:52.152-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: QO5AKI2FUD5U6GBQ.jpg
2024-10-07T15:24:52.878-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: RAD55JQZ2O0RO7VW.jpg
2024-10-07T15:24:53.599-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: 22RYU4UY8ZIBHMDS.jpg
2024-10-07T15:24:54.361-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: APEX26PXI65OVLKP.jpg
2024-10-07T15:24:55.136-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: V2L7QURPHAJSWKA1.jpg
2024-10-07T15:24:55.878-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: J6L5C5OR5N63G622.jpg
2024-10-07T15:24:56.478-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: Q702L9HMBNY6NM9M.jpg
2024-10-07T15:24:57.157-06:00 INFO 206544 --- [nio-8080-exec-1] c.e.demo.controller.HomeController : Procesando archivo: ETSOEYEKEKH67AUZ.jpg
Nota:
Es importante asegurarse de que los directorios de entrada y salida existan, y que los archivos de imagen estén en formatos compatibles como .jpg
o .png
.
¡Y eso es todo! Con este simple enfoque, puedes automatizar la generación de miniaturas en tu proyecto Spring Boot. Si tienes preguntas o comentarios, no dudes en dejar un comentario abajo.