まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Automatiser des tâches avec Gimp

Je vous livre ici la méthode qui me permettra de gagner du temps lors de longues séries de scan !
Sauf que j'ai dû investir beaucoup de temps pour chercher, trouver, avoir cru comprendre, re…rechercher, et finir par comprendre… J'y aurai passé la journée !!
Mais le retour sur cet investissement devrait être plus que positif rapidement ^^

Pour la petite histoire, jusqu'à maintenant, lorsque je scannais des pages, je faisais une pré-numérisation, suivie d'un cadrage.
Ensuite, le scan à 300dpi… long, avec le Lexmark.
Une fois l'image débarquée dans Gimp, je re-cadrais l'image au pixel prés, puis j'appliquais un flou gaussien (Horizontal 1, Vertical 1, RLE), afin d'atténuer la trame d'imprimerie.
Et enfin, Enregistrement de l'image en JPEG à 85% de qualité, en lui donnant le nom adéquat.
J'arrivais à gagner un peu de temps en faisant la pré-num d'une autre page durant les opérations avec Gimp pour la précédente… mais que de temps perdu !!

Maintenant, ça se déroulera de cette manière :

  1. Scan directement de la page à la taille maximale,[1] en demandant à Xsane d'enregistrer les images avec un schéma de nom de fichier prédéfini, en incrémentant de 1 le N° à chaque nouveau scan. (Qualité du JPEG renseignée dans le paramètres par défaut à 100%)
  2. Une fois toutes les pages scannées, exécution d'une commande Gimp qui va se charger d'appliquer le flou gaussien à l'ensemble des fichiers, en les enregistrant en JPEG 85%.

Et… c'est tout :) Moins de cliques de souris et plus rapide avec le scanner hp !

Bref, voici donc comment faire :

  • On va demander à Gimp d'appliquer un flou gaussien (Horizontal 1, Vertical 1, RLE) sur tous les fichiers JPEG d'un dossier, grâce à un Script-fu.

Créer un fichier texte contenant ceci :

(define (flou-pour-joypad pattern
                          Horizontal
                          Vertical
                          RLE) ;définition de la fonction avec les variables demandées dans la commande

	(let* ((filelist (cadr (file-glob pattern 1))))
		(while (not (null? filelist))

	(let* ((filename (car filelist))
		(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) ; chargement de l'image
		(drawable (car (gimp-image-get-active-layer image)))) ;on récupère le calque actif
		(plug-in-gauss RUN-NONINTERACTIVE image drawable Horizontal Vertical RLE) ;Flou gaussien     

		(gimp-file-save RUN-NONINTERACTIVE image drawable filename filename) ;on sauve
		(gimp-image-delete image))
		(set! filelist (cdr filelist)))))

L'enregistrer dans le dossier «scripts» de Gimp (le nom du fichier importe peu, c'est flou-pour-joypad qui servira…)
Chez moi c'est : /home/makoto/.gimp-2.6/scripts/flou-joypad.scm

  • Puis on va appeler ce script par une commande depuis un terminal.

Se placer dans un dossier de test, avec quelques images JPEG, et exécuter :

gimp -i -b '(flou-pour-joypad "*.jpg" 15 15 1)' -b '(gimp-quit 0)'

Il doit être renvoyé ceci lorsque l'opération est achevée.

batch command executed successfully

Aller voir les images, elles doivent être bien floue !

gimp-save.png Les fichier auront été sauvés en JPEG 85% à condition que ce soit la valeur par défaut de votre Gimp!!!!






Pour encore se faciliter la vie, on pourra cliquer sur ce petit script pour lancer cette opération de «GIMP Batch Mode» où «traitement par lot» sans taper de commande.
Créer un fichier gimp-joypad, avec ça dedans :

#!/bin/bash
gimp -i -b '(flou-pour-joypad "*.jpg" 1 1 1)' -b '(gimp-quit 0)'

Ne pas oublier de rendre le fichier exécutable !
Changer les valeurs numériques, pour personnaliser l'effet, respectivement : Valeur Horizontal, Valeur Vertical, 1=RLE 0=IIR)



J'aurais donc trouvé un modèle qui Marche ! depuis ce lien http://www.gimp.org/tutorials/Basic_Batch/, malgré de nombreux essais depuis d'autres sites…
Avec cela j'ai fini par comprendre, alors que J'ai passé des heures à me demander pourquoi la commande me renvoyait toujours :

batch command experienced an execution error

Qu'elle avait besoin qu'on lui passe les valeurs numériques, et que les mettre dans le scrip-fu ne fonctionnait pas… enfin, quelque chose comme ça ^^; c'est qu'en 8 heures de bidouilles il s'en passe des trucs !

Note

[1] plus besoin de recadrer, les magazines suivant sont un peu plus grand que du A4

Commentaires

1. Le mercredi, 25 août 2010, 11:07 par Tibo

Salut !

J'ai aussi un scanner à chargeur et j'ai le même problème de traitement par lots :

à partir des commandes suivantes, je voudrai créer un tableau avec deux lignes (numéro de couleur et valeur de la couleur) pour pouvoir détecter la couleur la plus claire (fond de la page scannée) et la changer en blanc.

Mais je ne sais pas quel langage utiliser pour cette détection, est-ce que gimp exécute le langage C ?

file-jpeg-load ou file-bmp-load ; pour charger l'image
gimp-posterise ; pour réduire le nombre de couleurs
gimp-palette-get-info ; pour être sur du nombre de couleurs
gimp-palette-is-editable ; pour être sûr que l'on peut changer les couleurs
gimp-palette-entry-get-color ; pour lire les couleurs et voir la plus claire
gimp-palette-entry-set-color ; pour mettre du blanc (#ffffff) à la place
file-png-save-defaults ; pour enregistrer l'image en PNG (plus léger que le JPEG pour les textes avec un nombre restreint de couleurs)

Salut et merci d'avance pour la réponse.

2. Le mercredi, 25 août 2010, 11:56 par MaKoTo

Élo !

Je n'ai pas de scanner à chargeur.
Je ne sais pas si gimp exécute le langage C, désolé.

3. Le mercredi, 25 août 2010, 21:47 par Tibo

Holà, désolé pour la méprise.

en tout cas ton script va m'aider à faire le mien... si tu es intéressé, je le poste ici quand il est terminé ?

mais pour le langage, j'ai trouvé : il faut utiliser du scheme comme toi.

à+

4. Le mercredi, 25 août 2010, 21:58 par MaKoTo

Oui tu pourras le poster !
Les scripts utiles je les accueille avec plaisir ^^

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet