Una de las características que mas me gustan de Ubuntu, al igual que sucede con cualquier otra distribución Linux, son las posibilidades de personalizar, modificar, cambiar, y particularizar hasta el más mínimo detalle del Sistema Operativo.
Esto mismo sucede con muchas de las aplicaciones que trabajan sobre Ubuntu, como es el caso de Nautilus o Nemo.
Así, ya desde hace tiempo, llevaba en mente desarrollar un creador de miniaturas o thumbnails, es decir un thumbnailer; mas que nada por la curiosidad que me produce conocer el funcionamiento de Ubuntu. Las posibilidades de desarrollar un thumbnailer son mas que interesantes.
En este primer artículo, explicaré como implementar tu propio thumbnailer, en el segundo de los artículos, introduciré un thumbnailer para el formato webp.
Creando un thumbnailer
Un thumbnailer está formado por dos archivos; por un lado tenemos el ejecutable que se encarga de generar la miniatura del archivo original, y por otro tenemos el archivo que informa al sistema de los miniaturizadores que dispone. Realmente son dos archivos muy sencillos, que con un poco de conocimientos de programación que tengas puedes crear tu mismo. Esto evidentemente abre todo un abanico de posibilidades de personalización de tus miniaturas hasta el más mínimo detalle.
¿Como crea Gnome las miniaturas?
Así, ¿Como hace Gnome para crear las miniaturas?, pues como he indicado en el parrafo anterior, utiliza una colección de aplicaciones denominadas thumbnailers o miniaturizadores que se encargan de generar miniaturas para cada tipo de archivo particular. Así por ejemplo para crear una miniatura de un vídeo se utiliza totem-video-thumbnailer o para generar la miniatura de un archivo PDF se utiliza evince-thumbnailer.
Para generar una miniatura, se selecciona la aplicación de miniaturización adecuada y se le pasan una serie de parámetros, como es la ubicación del archivo a miniaturizar, la dirección donde se guarda la miniatura.
Los miniaturizadores se seleccionan examinando una serie de archivos con extensión .thumbnailer y que se encuentran habitualmente en /usr/share/thumbnailers/, y que tienen un formato como el que puedes ver a continuación,
[Thumbnailer Entry] TryExec=evince-thumbnailer Exec=evince-thumbnailer -s %s %u %o MimeType=application/pdf;application/x-bzpdf;application/x-gzpdf;
Este archivo tiene tres entradas,
- TryExec. Opcional. Es el nombre del miniaturizador, si en ejecutable se encuentra en el $PATH, en otro caso tendrás que especificar además el directorio en el que se encuentra. Esto permite comprobar si el miniaturizador existe antes de intentar ejecutarlo.
- Exec. Requerido. Es el comando que ejecutaremos, el cual soporta algunos parámetros que se reemplazan cuando se llama al miniaturizador:
- %u es el URI del archivo que queremos miniaturizar
- %i es el nombre del archivo
- %o es el nombre del archivo de salida a escribir
- %s es el tamaño máximo deseado en pixels
- MimeType. Requerido. Una lista de tipos MIME separados por punto y coma que son soportados por el miniaturizador.
Así por ejemplo, en el caso anterior la orden pasará el tamaño del archivo, el URI del archivo y la salida.
Cada vez que se llama a un miniaturizador el directorio que se pasa para generar el archivo de salida es ~/.cache/thumbnails/normal/ o ~/.cache/thumbnails/large/, dependiendo del tamaño de la miniatura. Las miniaturas de tamaño 128×128 son normales, mientras que las superiores son large. Las miniaturas de tamaño superiores a estos valores son redimensionadas de forma que la mayor de las dimensiones sea 128 ó 256 pixels.
En el caso de que al generar una miniatura se produzca un error, se genera un archivo en ~/.cache/thumbnails/fail/gnome-thumbnail-factory/ con el código hash del URI del fichero de entrada. Esto no es necesario que lo realice el miniaturizador sino que se encarga el propio Gnome de hacer esta operación. Así la próxima vez que se tenga que generar la miniatura al ver que está este archivo no se intenta.
Si el contenido de un archivo cambia, se generara una nueva miniatura, porque cada imagen en el caché tiene asociada una información asociada como claves donde se guarda el URI del archivo original y la fecha de la última modificación. Así si se cambia la fecha se genera miniatura.
Miniaturizadores interesantes
Algunos miniaturizadores que te pueden resultar interesante, dependiendo de que es lo que sueles hacer son los siguientes,
- libthumbnailer0 – un generador de miniaturas.
- gnome-exe-thumbnailer – miniaturizador de ejecutables Wine .exe y otros
- gnome-raw-thumbnailer – miniaturizador de archivos RAW
- ooo-thumbnailer – miniaturizador de documentos de openoffice
- kde-thumbnailer-deb – complemento KDE para mostrar miniaturas de paquetes debian
- kdegraphics-thumbnailers – miniaturizadores para archivos gráfiicos de KDE SC
- ffmpegthumbnailer – generador rápido y ligero de miniaturas para archivos de vídeo
- ffmpegthumbs – generador de miniaturas para archivos de vídeo utilizando ffmpeg
Más información,
Lorenzo, sácame de una duda… ¿con Ubuntu Gnome 16.04 estos miniaturizadores ya no funcionan, verdad? Llevo un buen rato quebrándome la cabeza gratis por ello.
Hola Ichongv,
Debería de funcionar. ¿No te funciona? ¿que problema te da?
Gracias
Cuando salió Ubuntu Gnome 16.04 noté que no funcionaban, pues, (escudriñando mucho) noté que otra pieza de software las estaba generando por defecto, y no logré reemplazarlo en su momento por tus miniaturizadores. Ahora lo he vuelto a intentar y sí funcionan.
El que aún no logro echar a andar es el miniaturizador de webp.
Por cierto, mil felicitaciones y gracias por este blog, he obtenido varios trucos muy útiles. Se aprecia mucho el trabajo hecho.
Hola lchongv,
Tengo pendiente ponerme con los miniatuirzadores…. Me pongo en la lista de tareas el de webp a ver si lanza algún error.
Muchas gracias.