Gimp - Transformer un fichier pdf en un lot d'images png


La présente page montre comment transformer automatiquement, à l'aide de Gimp, un fichier pdf en un lot d'images png puis comment ajouter automatiquement une bordure noire (ou autre couleur) de 1 pixel à ces images. Le niveau de compression des images png obtenues peut être choisi.

La présente méthode a été testée sous Ubuntu 20.04 avec Gimp 2.10. Elle doit normalement fonctionner avec d'autres versions de Ubuntu et de GIMP. Elle est intéressante quand le fichier pdf contient un grand nombre de pages (sinon on peut facilement effectuer le travail "à la main" image par image).

Transformation automatique d'un fichier pdf en images png

L'opération se déroule en 3 étapes :
1) Transformer le fichier pdf en un lot d'images png;
2) Encadrer automatiquement chaque image du lot;
3) Modifier, si nécessaire, le nom des images.

1) Transformer le fichier pdf en un lot d'images png

1.1) Charger les images dans Gimp

Pour transformer le fichier pdf en un lot d'images png, il suffit d'ouvrir le fichier pdf avec Gimp (Fichier>Ouvrir). Dans la boite de dialogue qui s'ouvre, on choisit la largeur, la hauteur et la résolution souhaitées pour les images puis on clique Importer.

02

Les pages du fichier pdf se placent alors automatiquement dans la pile de calques de Gimp (une page par calque, dans l'ordre des pages). La page 1 du fichier pdf se place dans le calque situé en haut de la pile, la page 2 dans le calque juste en dessous et ainsi de suite...

Remarque : si le fichier pdf contient peu de pages, on peut facilement exporter chaque calque "à la main", un par un, en un fichier png (Fichier > Exporter sous). Pour sélectionner un calque à exporter, il suffit de cliquer sur les yeux des calques situés au dessus de lui (indiqués par une flèche rouge sur l'image ci-après), il faut ensuite choisir le type de fichier "png".

03

Si le nombre de calque est important (150 calques par exemple), il est avantageux d'effectuer cette tâche à l'aide d'un traitement par lot (pour plus d'informations, consulter la page Programmer en langage Scheme avec Gimp)
Le script utilisé ici s'appelle ct-scalques.scm (ct sont les initiales de l'auteur et scalques signifie "sauver les calques"). Ce calque va exporter, automatiquement au format png, tous les calques présents dans la pile de calques de Gimp. Les images sont exportées automatiquement dans le répertoire /home/ubuntu/essai avec le nom image_n, n étant le numéro du calque dans la pile (1,2,3...n).

04

1.2) Installer le script ct-scalques.scm

On commence par télécharger le script ct-scalques.scm suivant:
ct-scalques.scm

;--------------------------------------------------------------------
; ct-scalques.scm 
; version Linux  
;
; sudo cp ct-scalques.scm /usr/share/gimp/2.0/scripts/
; sudo rm /usr/share/gimp/2.0/scripts/ct-scalques.scm
; --------------------------------------------------------------------
(
define (ct-scalques img0)
;-->début let1
(let* ((chemin  "/home/ubuntu/essai/image_"))
;-->début letloop
(let loop ((lc (vector->list (cadr (gimp-image-get-layers img0)))))
;-->début unless
(unless (null? lc) 
(gimp-edit-copy (car lc))
;-->début let2
(let* ( 
(nom (car (gimp-item-get-name (car lc))))
(out (string-append chemin nom ".png"))
(imgsauv  (car (gimp-edit-paste-as-new)))
(cc (aref (cadr (gimp-image-get-layers imgsauv)) 0)))
(file-png-save 1 imgsauv cc out out 0 0 0 0 0 0 0)		      
);<--fin let2
(loop (cdr lc)); retour vers  début unless
))));<--fin unless, letloop, let1, define
;
(script-fu-register "ct-scalques" 
"<Image>/MesScripts/ct-scalques"
"---calques en png------------"
"Enregistre tous les calques"
"Claude Turrier"
"2021"
"-------------------------------"
SF-IMAGE "Image" 0 ;img0
)

Puis on copie ce script dans le répertoire des scripts de Gimp. Pour cela, on utilise la commande suivante, avec le Terminal ouvert dans le répertoire où se trouve téléchargé le script ct-scalques.scm:
sudo cp ct-scalques.scm /usr/share/gimp/2.0/scripts/
Pour supprimer ce script du répertoire des scripts de Gimp, on utilise la commande suivante, avec le Terminal ouvert dans n'importe quel répertoire:
sudo rm /usr/share/gimp/2.0/scripts/ct-scalques.scm

Pour faire apparaître ce script dans dans la barre de menu principale de Gimp, soit on ferme puis on ouvre Gimp, soit on clique, dans Gimp déjà ouvert, sur le menu Filtres > Script-Fu > Actualiser les scripts
Ce script apparaît alors dans le menu MesScripts dans la barre de menu de Gimp.

1.3) Utiliser le script ct-scalques.scm

L'utilisation du script ct-scalques.scm est très simple. Il suffit de cliquer le menu Mes Scripts > ct-scalques, dans la barre de menu de Gimp, et le contenu des n calques est automatiquement recopié dans le répertoire /home/ubuntu/essai sous forme de n images image_1.png, image_2.png, ...image_n.png

Remarques :
Les images sont recopiées au format png sans compression (c'est à dire compression=0). Si on veut que les images soient recopiées avec une compression différente (par exemple la compression maximale qui est égale à 9), il suffit de remplacer, dans le script, l'instruction :
(file-png-save 1 imgsauv cc out out 0 0 0 0 0 0 0)
par
(file-png-save 1 imgsauv cc out out 0 9 0 0 0 0 0)
Dans le cas présent cela n'est pas nécessaire car le script suivant (ct-lotcadrepng.scm) permet de choisir le taux de compression souhaitée pour les images.
Pour modifier le taux de compression d'un lot d'images png, on peut également utiliser l'outil ImageMagick, en utilisant l'instruction suivante en ligne de commande, avec le terminal ouvert dans le répertoire où se trouvent les images : for f in *.png; do convert "$f" -quality 80 "$f"; done

2) Encadrer automatiquement chaque image du lot

2.1) Créer un répertoire de destination pour les images

Pour encadrer toutes les images png, créées précedemment dans le répertoire /home/ubuntu/essai, on crée un répertoire /home/ubuntu/essai2 dans lequel seront placées les images encadrées, avec le même nom.

2.2) Installer le script ct-lotcadrepng.scm

Si on veut ajouter un cadre (c'est à dire une bordure de 1 pixel) aux images précédentes, on commence par télécharger le script ct-lotcadrepng.scm suivant:
ct-lotcadrepng.scm

;--------------------------------------------------------------------
; ct-lotcadrepng.scm 
; version Linux 
; Install: sudo cp ct-lotcadrepng.scm /usr/share/gimp/2.0/scripts/
; remove: sudo rm  /usr/share/gimp/2.0/scripts/ct-lotcadrepng.scm
;---------------------------------------------------------------------
; CHARGER L'IMAGE COURANTE EN MEMOIRE
;----------------------------------------------------------------
(define (ct-lotcadrepng r1  r2 q couex couin);define
(let* ((liste (cadr (file-glob (string-append r1 "/*.png") 1))));let1 
(while (not (null? liste));while                        
(let* ((in (car liste)) ;let2                      
(img (car (gimp-file-load RUN-NONINTERACTIVE in in))) 		
(out (string-append r2 "/" (car (gimp-image-get-name img)))) 
(c (car (gimp-image-get-active-drawable img)))
;(couex '(0 0 0)) ; couleur de la partie extérieure du cadre
;(couin '(255 255 255)) ; couleur de la partie intérieure du cadre
(n 10) ; nombre de coordonnées des points constituant le tracé
(tc (make-vector 10 'double))
(h (car (gimp-image-height img))) (w (car (gimp-image-width img)))
(u w) (v h) (nw (+ w 4)) (nh (+ h 4)) 
);fin defvar let2
;
;---------------------------------------------------------------------
; TRAITER L'IMAGE COURANTE 
;---------------------------------------------------------------------
(gimp-image-resize img nw nh 2 2)
(set! c (car (gimp-layer-new img nw nh 1 "myC" 100 0)))
(gimp-image-insert-layer img c 0 0)
(gimp-brush-new "mabrosse")
(gimp-brushes-refresh)
(gimp-context-set-brush "mabrosse")
(gimp-context-set-brush-aspect-ratio 0)
;
;--cadre extérieur noir de 1 pixel d'épaisseur
(gimp-context-set-foreground couex) ;couleur extérieure choisie
(gimp-context-set-brush-size 1); 1 pixel
(set! u (- nw 1))
(set! v (- nh 1))
(vector-set! tc 0 0) ; point 1 (x)
(vector-set! tc 1 0) ; point 1 (y)
(vector-set! tc 2 u) ; point 2 (x)
(vector-set! tc 3 0) ; point 2 (y)
(vector-set! tc 4 u) ; point 3 (x)
(vector-set! tc 5 v) ; point 3 (y)
(vector-set! tc 6 0) ; point 4 (x)
(vector-set! tc 7 v) ; point 4 (y)
(vector-set! tc 8 0) ; point 5 (x)
(vector-set! tc 9 0) ; point 5 (y)
(gimp-pencil c n tc) ;tracé dans l'ordre des points
;
;--cadre intérieur blanc de 1 pixel d'épaisseur
(gimp-context-set-foreground couin) ;couleur intérieure choisie
(gimp-context-set-brush-size 1) ;1 pixel
(set! u (- nw 2))
(set! v (- nh 2))
(vector-set! tc 0 1)
(vector-set! tc 1 1)
(vector-set! tc 2 u)
(vector-set! tc 3 1)
(vector-set! tc 4 u)
(vector-set! tc 5 v)
(vector-set! tc 6 1)
(vector-set! tc 7 v)
(vector-set! tc 8 1)
(vector-set! tc 9 1)
(gimp-pencil c n tc )
;
(gimp-image-flatten img)
(set! c (car (gimp-image-get-active-drawable img)))
;----------------------------------------------------------------------
; PREPARER LE PASSAGE A l'IMAGE SUIVANTE
;----------------------------------------------------------------------	
(file-png-save 1 img c out out 0 q 0 0 0 0 0)
(gimp-image-delete img)                              					
); fin let2
(set! liste (cdr liste))
)))  ;fin while, let1, define
;
;-----------------------------------------------------------
; ENREGISTRER LE SCRIPT
;---------------------------------------------------------------
(
script-fu-register "ct-lotcadrepng" 								
"<Image>/MesScripts/ct-lotcadrepng"                               			
"--Cadre de 1px --"
"traitement par lot"
"Claude Turrier"
"2021"
"-------------------------------"
SF-DIRNAME  "Répertoire d'entrée"   "/home/ubuntu/essai"  ;r1                   
SF-DIRNAME  "Répertoire de sortie"  "/home/ubuntu/essai2" ;r2  
SF-ADJUSTMENT  "Compression"   '(0 0 9 1 1 0 0) ;q                 
SF-COLOR   "Couleur extérieure"      '(0 0 0) ;couex
SF-COLOR   "Couleur intérieure"     '(255 255 255)  ;couin         
)  

Pour copier ce script dans le répertoire des scripts de Gimp, on utilise la commande suivante, avec le Terminal ouvert dans le répertoire où se trouve le script téléchargé :
sudo cp ct-lotcadrepng.scm /usr/share/gimp/2.0/scripts/
Pour supprimer ce script du répertoire des scripts de Gimp, on utilise la commande suivante, avec le Terminal ouvert dans n'importe quel répertoire :
sudo rm /usr/share/gimp/2.0/scripts/ct-lotcadrepng.scm
Pour faire apparaître le script dans la barre de menu principale de Gimp, soit on ferme puis on ouvre Gimp, soit on clique, dans Gimp déjà ouvert, sur le menu Filtres > Script-Fu> Actualiser les scripts. Ce script apparaît alors dans le menu MesScripts dans la barre de menu principale de Gimp.

05

2.3) Utiliser le script ct-lotcadrepng.scm

Pour utiliser le script ct-lotcadrepng.scm, il suffit de cliquer le menu Mes Scripts > ct-lotcadrepng dans la barre de menu de Gimp. Dans la boîte de dialogue qui s'ouvre, on choisit :

  • le répertoire d'entrée (on laisse le répertoire d'entrée par défaut (/home/ubuntu/essai) si les images png à traiter se trouvent dans ce répertoire;
  • le répertoire de sortie (on laisse le répertoire de sortie par défaut (/home/ubuntu/essai2) si ce répertoire existe et que l'on souhaite que les images png encadrées soient copiées dans ce répertoire;
  • le taux de compression pour les images encadrées (avec le taux de compression maximal égal à 9, les images occuperont moins de place, sans perte de qualité avec le format png);
  • la couleur extérieure de 1 pixel du cadre (la couleur par défaut noire par exemple);
  • la couleur intérieure de 1 pixel du cadre (la couleur par défaut blanche par exemple).

Puis on clique le bouton Valider.

06

Les n images, image_1.png, image_2.png, ...image_n.png, qui se trouvent dans le répertoire /home/ubuntu/essai, sont alors automatiquement encadrées puis enregistrées sous forme de n images image_1.png, image_2.png, ...image_n.png, avec une compression png de 9, dans le répertoire /home/ubuntu/essai2.

Remarque :
Si on choisit une couleur intérieure noire, le cadre sera alors noir avec 2 pixels d'épaisseurs.
Si on souhaite des épaisseurs différentes, il suffit de modifier le script en conséquence.
Par exemple, on remplace l'instruction :
(gimp-context-set-brush-size 1); 1 pixel
par
(gimp-context-set-brush-size 4); 4 pixels

3) Modifier le nom des images

On peut avoir besoin de remplacer les noms d'images image_1.png, image_2.png, ...image_n.png par 001.png, 002.png, ...xxx.png par exemple.

Cela peut se faire simplement avec l'Explorateur de fichier de Ubuntu. On sélectionne les images, on clique avec le bouton droit de la souris puis on clique l'option de menu Renommer avec le bouton gauche de la souris.

07

Dans la boîte de dialogue qui s'ouvre, on clique le bouton à options Rechercher et remplacer un texte, on écrit image_ dans la zone de texte Texte existant, on écrit 00 dans la zone de texte Remplacer par puis on clique le bouton Renommer.

08

Les images sont automatiquement renommées avec leur nouveau nom 001.png, 002.png etc...
Remarque : dans cet exemple, on a renommé 6 images mais bien entedu cela fonctionne de la même façon pour un nombre quelconque d'images (157 images par exemple).

09