Linux – Créer un générateur de miniatures pour votre explorateur de fichiers.

Exemple de dossiers avec des miniatures personnalisées.

Suite à l’article précédent concernant les miniatures dans les gestionnaire de fichiers, je vais expliquer dans cet article, comment créer un générateur de miniatures pour certains types de fichiers. Et plus particulièrement dans mon cas:

Créer un générateur de miniature si le dossier contient une image nommée spécifiquement.

Cet article m’a été inspiré par celui-ci:
https://blog.flozz.fr/2020/07/15/cover-thumbnailer-apres-plus-de-10-ans-cest-termine/

J’ai écrit il y à quelques années (2018) un script assez similaire sur le principe: Afficher les pochettes d’albums ou autre sur l’icône d’un dossier. Cover Thumbnailer est énormément personnalisable et possède une GUI pour la configuration, contrairement à mon script qui est vraiment développé spécifiquement pour mon usage.

Notes aux utilisateurs de Nautilus: Nautilus depuis un moment utilise une version « sandbox » pour générer les miniatures et cette technique peut ne pas fonctionner pour vous.
Pour Caja, Nemo et Thunar, le script fonctionne sans soucis pour le moment.

Comment fonctionne un générateur de miniatures ?

Les fichiers de code

  • Le script permettant le génération de la miniature est écrit en Python. Pourquoi pas en bash ? Tout simplement car je trouve Python beaucoup plus simple à prendre en main pour mon usage.
  • Un fichier .thumbnailer qui permet à l’explorateur de fichier de savoir en fonction du type de fichier, quel commande il doit lancer.

Emplacement des fichiers

Les emplacement peuvent changer en fonction de votre distribution. Chez moi, voici les emplacements des fichiers:

  • cover.thumbnailer
  • cover.py

cover.thumbnailer

[Thumbnailer Entry]
Exec=python /usr/bin/cover.py %u %o %s
MimeType=inode/directory

Script Python

#!/bin/env python3

# Date de création: 2020.04.28
# Date de dernière modification: 2018.07.02

from sys import argv
from os import path, listdir
from urllib.parse import unquote

try:
    from PIL import Image, ImageDraw
except ImportError:
    import Image

allowed_covers_names = ["cover", "Cover"]
allowed_covers_extensions = ['.png', '.jpg', '.jpeg']

# Which file are we working with?
folder_path = argv[1]

# Remove "file://"
folder_path = folder_path.replace('file://', '')
folder_path = unquote(folder_path)

# Where do does the file have to be saved?
output_file = argv[2]

# Required size?
size = int(argv[3])

cover_filename = [cover for cover in listdir(folder_path) if path.splitext(cover)[0] in allowed_covers_names and path.splitext(cover)[1] in allowed_covers_extensions]

# Pure python convert - We can also use imagemagick
if cover_filename:
    cover_filepath = path.join(folder_path, cover_filename[0])

    picture = Image.open(cover_filepath)
    picture.thumbnail((size, size), Image.ANTIALIAS)
    # if im.mode == "CMYK":
    # im = im.convert("RGB")
    picture.save(output_file, "PNG")

else:
    exit(1)

Fonctionnement et syntaxe du fichier .thumbnailer

Liens de documentation

Laisser un commentaire