2 votes

Comment générer des vignettes à l'avance (surtout en pdf)

J'ai un ensemble de documents assez volumineux (150 Go ~5000 fichiers) et j'aimerais savoir comment pré-générer des vignettes, de préférence à partir de la ligne de commande, de sorte que lorsque je navigue dans le dossier, je n'ai pas à attendre qu'elles soient créées.

3voto

Scott Goodgame Points 2566

Grâce aux commentaires j'ai décidé d'utiliser un des scripts de ce post recommandé de AskUbuntu.

Je l'ai simplement copié dans un fichier, l'ai enregistré dans mon ~/bin (dans mon cas sous le nom de generate-thumbnails) et ai lancé chmod +x sur elle. Ensuite, j'ai juste navigué jusqu'au dossier ~/Documents et j'ai exécuté generate-thumbnails * Je ne sais pas combien de temps ça a pris, mais quand je me suis réveillé le lendemain, tout allait bien.

Sachez que vous devrez peut-être installer gir1.2-gnomedesktop-3.0 :

sudo apt-get install gir1.2-gnomedesktop-3.0

Comme il ne perd pas de temps à générer des doublons, il s'agirait d'une tâche cron à faible impact (après la première exécution).

À partir d'une invite de terminal crontab -e Si c'est la première fois que vous modifiez la crontab, il vous sera demandé de choisir un éditeur. J'utilise simplement nano et je vais vous donner les commandes clavier pour celui-ci.

Ajoutez ce qui suit à la fin...

0 4 * * * /home/user/bin/generate-thumbnails /home/user*
  • Ctl o Sauvegarde le fichier.
  • Ctl x Va sortir. (si vous avez une erreur de syntaxe, il vous le fera savoir et vous pouvez simplement crontab -e à nouveau. Cela configure le cron pour qu'il s'exécute à 4h du matin tous les matins.
  • Si vous voulez le changer ou regarder d'autres options de cron https://help.ubuntu.com/community/CronHowto est un bon endroit pour trouver des options.

Principales raisons d'exécuter ce script :

  • il parcourra les sous-répertoires
  • il est conscient des doublons
  • il fonctionne aussi bien pour les vidéos
  • il fonctionnera dans d'autres DE (je change souvent en fonction de ce que je fais)
  • ce serait bien pour une tâche cron

Voici le script.... (Merci James Henstridge ! !

#!/usr/bin/env python2
import os
import sys

from gi.repository import Gio, GnomeDesktop

def make_thumbnail(factory, filename):
    mtime = os.path.getmtime(filename)
    # Use Gio to determine the URI and mime type
    f = Gio.file_new_for_path(filename)
    uri = f.get_uri()
    info = f.query_info(
        'standard::content-type', Gio.FileQueryInfoFlags.NONE, None)
    mime_type = info.get_content_type()

    if factory.lookup(uri, mtime) is not None:
        print "FRESH       %s" % uri
        return False

    if not factory.can_thumbnail(uri, mime_type, mtime):
        print "UNSUPPORTED %s" % uri
        return False

    thumbnail = factory.generate_thumbnail(uri, mime_type)
    if thumbnail is None:
        print "ERROR       %s" % uri
        return False

    print "OK          %s" % uri
    factory.save_thumbnail(thumbnail, uri, mtime)
    return True

def thumbnail_folder(factory, folder):
    for dirpath, dirnames, filenames in os.walk(folder):
        for filename in filenames:
            make_thumbnail(factory, os.path.join(dirpath, filename))

def main(argv):
    factory = GnomeDesktop.DesktopThumbnailFactory()
    for filename in argv[1:]:
        if os.path.isdir(filename):
            thumbnail_folder(factory, filename)
        else:
            make_thumbnail(factory, filename)

if __name__ == '__main__':
    sys.exit(main(sys.argv))

2voto

Rinzwind Points 270388

Bash script (bravo à Tim) . A partir du lien, le script suivant et les commentaires :

for i in *.jpg
do
djpeg $i | pnmscale -xysize 48 38 | cjpeg -opti -progr -qual ‘75%’ > TN_$i
echo $i processed
done
  • Cela va créer des vignettes pour les fichiers se terminant par .jpg et créer une vignette avec le nom TN_*.jpg. Ajustez les paramètres à votre convenance.

  • Pour les vignettes, vous n'avez souvent pas envie d'utiliser imagemagick ou convert ou autre ; pour ma taille normale (48×38), cela crée un énorme jpg de 50K alors qu'il existe d'autres moyens de les réduire :

  • Cela permet de maintenir la taille moyenne des images à environ 1K - ce qui convient mieux à une page de vignettes !

  • pnmscale sera installé par défaut

  • Installation de djpeg et cjpeg

    sudo apt-get install libjpeg-turbo-progs
  • edit : ne fonctionne pas avec le PDF


Ignorant le conseil dans le commentaire sur l'utilisation d'imagemagick ...

sudo apt-get install imagemagick

et l'utiliser comme une méthode similaire à la précédente, mais dans ce cas, en utilisant la commande convert de l'IM :

#!/bin/bash
FILES="$@"
for i in $FILES
do
echo "Processing image $i ..."
/usr/bin/convert -thumbnail 100X100 $i $i.png
done

Voici un document élaboré sur le thumbnailing en utilisant IM. Vous pouvez spécifier la hauteur, la largeur et bien d'autres choses encore. Exemple à partir du lien :

Par exemple, ceci convertit des images JPG en vignettes GIF dans un sous-répertoire "thumbs" qui vient d'être créé de 100 pixels de large et 100 pixels de haut

mkdir thumbs  
mogrify  -format gif -path thumbs -thumbnail 100x100 *.jpg

Oh le titre est spécifique au PDF. En utilisant IM...

convert -thumbnail 100x100 1.pdf 1.png

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X