web-dev-qa-db-fra.com

GIMP à l'aide de la ligne de commande

Je veux faire une opération sur certaines images en utilisant GIMP via la ligne de commande sur Ubuntu. Les opérations que je souhaite effectuer sont:

  1. Ouvrez une image
  2. Convertir une image en niveaux de gris
  3. Convertir une image PNG en JPEG

Comment puis-je les faire en utilisant la ligne de commande?

20
Sara
  1. Ouvrir une image est vraiment facile (image.png est l'image que vous souhaitez ouvrir)

    gimp image.png
    

  1. Convertissez l'image RVB en niveaux de gris:

    Créez un fichier Script-Fu GIMP (nommé ici dmmConvertPNGtoGrayscale.scm et enregistré dans $HOME/.gimp-2.8/scripts):

    ; dmmPNGtoGrayscale - GIMP Script-Fu to convert a PNG image to Grayscale
    ;    This Script-Fu must be put in The GIMP's script directory
    ;    (e.g., $HOME/.gimp-1.2/scripts).
    ;    For command-line invocation, use the Shell script rgbtogs.sh
    ;    For interactive invocation, run The GIMP and go to
    ;    Xtns -> Script-Fu -> dmm
    ;
    (define (dmmPNGtoGrayscale infile outfile)
       (let* ((image (car (file-png-load 1 infile infile)))
                 (drawable (car (gimp-image-active-drawable image)))
              )
    
             (gimp-convert-grayscale image)
    
             (file-png-save 1 image drawable outfile outfile 
                  1 0 0 0 0 0 0 )
                ; 1 Adam7 interlacing?
                ;   0 deflate compression factor (0-9)
                ;     0 Write bKGD chunk?
                ;       0 Write gAMMA chunk?
                ;         0 Write oFFs chunk?
                ;           0 Write tIME chunk?    ?? backwards in DB Browser
                ;             0 Write pHYS chunk?  ?? backwards in DB Browser
       )
    )
    
    (script-fu-register                                 ; I always forget these ...
       "dmmPNGtoGrayscale"                              ; script name to register
       "<Toolbox>/Xtns/Script-Fu/dmm/dmmPNGtoGrayscale" ; where it goes
       "dmm PNG (RGB or Indexed) to Grayscale"          ; script description
       "David M. MacMillan"                             ; author
       "Copyright 2004 by David M. MacMillan; GNU GPL"  ; copyright
       "2004-02-08"                                     ; date
       ""                                               ; type of image
       SF-FILENAME "Infile" "infile.png"                ; default parameters
       SF-FILENAME "Outfile" "outfile.png"
    )
    

    Et lancez-le en utilisant ce script (je l'ai nommé rgbtogs.sh par exemple) :

    # rgbtogs.sh
    # Invoke The GIMP with Script-Fu dmmPNGtoGrayscale.scm
    # No error checking.
    
    if [ -e $1 ] 
    then
       echo "Usage: rgbtogs.sh degrees filebasename"
       echo "Error: Parameter (filename base) required"
       exit 1
    fi
    
    gimp -c -i -d -b "(dmmPNGtoGrayscale \"$1.png\" \"$1-gray.png\")" "(gimp-quit 0)"
    

    Exécutez le script et lancez-le:

    chmod +x rgbtogs.sh
    ./rgbtogs.sh image
    

  1. Convertissez une image PNG en JPEG (ou JPG):

    Créez un fichier Script-Fu GIMP (nommé ici dmmConvertPNGtoJPG.scm et enregistré dans $HOME/.gimp-2.8/scripts):

    ; dmmConvertPNGtoJPG.scm - GIMP Script-Fu to Convert PNG to JPG
    ;    This Script-Fu must be put in The GIMP's script directory
    ;    (e.g., $HOME/.gimp-1.2/scripts).
    ;    For command-line invocation, use the Shell script pngtojpg.sh
    ;    For interactive invocation, run The GIMP and go to
    ;    Xtns -> Script-Fu -> dmm
    ;
    (define (dmmConvertPNGtoJPG infile outfile)
       (let* ((image (car (file-png-load 1 infile infile)))
              (drawable (car (gimp-image-active-drawable image)))
             )
    
             (file-jpeg-save 1 image drawable outfile outfile 
                  0.75 0 1 1 "GIMP" 0 1 0 0 )
                ; 0.75 quality (float 0 <= x <= 1)
                ;      0 smoothing factor (0 <= x <= 1)
                ;        1 optimization of entropy encoding parameter (0/1)
                ;          1 enable progressive jpeg image loading (0/1)
                ;            "xxxx"  image comment
                ;                   0 subsampling option number
                ;                     1 force creation of a baseline JPEG
                ;                       0 frequency of restart markers 
                ;                         in rows, 0 = no restart markers
                ;                         0 DCT algoritm to use 
       )
    )
    
    (script-fu-register                                 ; I always forget these ...
       "dmmConvertPNGtoJPG"                             ; script name to register
       "<Toolbox>/Xtns/Script-Fu/dmm/dmmConvertPNGtoJPG" ; where it goes
       "dmm Convert PNG to JPG"                         ; script description
       "David M. MacMillan"                             ; author
       "Copyright 2004 by David M. MacMillan; GNU GPL"  ; copyright
       "2004-01-27"                                     ; date
       ""                                               ; type of image
       SF-FILENAME "Infile" "infile.png"                ; default parameters
       SF-FILENAME "Outfile" "outfile.png"
    )
    

    Et lancez-le en utilisant ce script (je l'ai nommé pngtojpg.sh par exemple) :

    # pngtojpg.sh
    # Invoke The GIMP with Script-Fu dmmConvertPNGtoJPG.scm
    # No error checking.
    
    if [ -e $1 ] 
    then
       echo "Usage: pngtojpg.sh filebasename"
       echo "Error: Parameter 1 (filename base) required"
       exit 1
    fi
    
    gimp -c -i -d -b "(dmmConvertPNGtoJPG \"$1.png\" \"$1.jpg\")" "(gimp-quit 0)"
    

    Exécutez le script et lancez-le:

    chmod +x pngtojpg.sh
    ./pngtojpg.sh image
    

Source: http://beefchunk.com/documentation/lang/gimp/GIMP-Scripts-Fu.html

NB: à l'intérieur du fichier Script-Fu GIMP, vous pouvez supprimer toutes les lignes qui commencent par ; caractère (ou tout à droite sur ce caractère), ce ne sont que des commentaires

NB: Ces .scm script-fu a été créé à l'origine pour GIMP 1.2, mais j'ai testé avec GIMP 2.8 et il n'y a aucun problème

17
damadam

Je ne sais pas comment utiliser Gimp pour cette tâche, mais en fait je pense que les outils du package imagemagick sont un meilleur choix pour de telles tâches CLI. Ce package est largement utilisé comme outil de conversion sur les applications du serveur Web comme MediaWiki et WordPress, il est également un back-end pour certaines opérations effectuées par des applications graphiques telles que PhotoShop. Vous devez d'abord installer le package:

Sudo apt install imagemagick

Utilisez ensuite la commande suivante pour accomplir la tâche ( référence ):

convert input-file.png -set colorspace Gray -separate -average output-file.jpg

Si vous avez besoin de convertir tous les fichiers PNG dans le répertoire courant, vous pouvez utiliser une boucle comme celle-ci:

for f in *.png; do convert "$f" -set colorspace Gray -separate -average "${f%.*}.jpg"; done
35
pa4080