GNU/Linux >> Tutoriels Linux >  >> Linux

Automatisez le traitement des images avec ce script Bash

Les écrivains ne travaillent pas seulement avec des mots, ils doivent souvent travailler avec des images. La rédaction technique consiste à présenter de nombreuses captures d'écran pour transmettre la technologie et les processus. Différentes plates-formes de publication peuvent avoir des exigences différentes pour les images, telles que le format d'image ou la taille de fichier.

En tant que consultant informatique et ingénieur système, j'ai rédigé de nombreuses documentations techniques en tant que livrables clients, généralement avec Microsoft Word (.doc) comme format requis. Tout document peut croître rapidement à mesure que du contenu est ajouté. Au début, les captures d'écran étaient souvent des bitmaps (.bmp), qui peuvent avoir une très grande taille de fichier. Un document décrivant l'installation d'un système d'exploitation sur un serveur pourrait finir par être un très gros fichier.

Réduire la taille des images sans les rendre illisibles était un exercice laborieux. Les bitmaps peuvent être convertis en fichiers jpeg et plus tard en fichiers png. L'édition a continué à être un défi encore plus tard lorsque j'ai basculé ma suite bureautique vers LibreOffice. Heureusement, la plupart des outils de capture d'écran actuels enregistrent dans des formats plus petits, tels que png.

Opensource.com impose certaines limites aux images utilisées dans ses articles. J'ai développé une méthode rapide en trois étapes pour préparer des images pour mes articles. La première étape consiste à être intelligent sur la mise en scène, comme le redimensionnement d'une fenêtre ou la modification d'une police. Deux étapes supplémentaires devenaient très répétitives. Il s'agit de s'assurer que l'image ne dépasse pas la limite de largeur de 600 pixels et d'appliquer une bordure.

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Le script prepimg.sh

J'ai écrit un script Bash appelé prepimg.sh pour gérer ces tâches. Ce script utilise deux outils de la suite ImageMagick.

Redimensionner l'image

L'utilitaire de capture d'écran enregistre l'image dans les Pictures répertoire avec un nom générique - quelque chose comme Screenshot-20210923222312.png . Mon prepimg.sh Le script vérifie la largeur en pixels des fichiers de ce répertoire et redimensionne ceux qui dépassent la limite. Cette étape utilise le identifier programme de la suite ImageMagick pour déterminer la largeur (%w).

$ identify -format %w Screenshot-20210903202655.png
1217

La valeur de la largeur est affectée à la variable W à utiliser comme comparateur jusqu'à la limite de 600. La limite elle-même est configurable via la variable $MAXWIDTH . S'il est déterminé que la largeur dépasse MAXWIDTH, un autre programme ImageMagick nommé convert est appelée pour réduire la largeur de l'image. Voici la fonction de traitement d'image de mon script :

     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     
     ...    

L'image est réduite en taille si nécessaire et enregistrée dans un répertoire différent défini par le $READY variable. Dans ce cas, l'image est en fait redimensionnée légèrement plus petite (598 pixels) pour laisser de la place pour l'ajout d'une bordure, que je montre ensuite.

Ajouter une bordure à l'image

Parfois, une image peut sembler se fondre dans l'arrière-plan de la page Web. En effet, la couleur de premier plan de l'image jusqu'à ses bords est la même que celle de l'arrière-plan du site. Voici un exemple :

Comme vous pouvez le voir avec l'image ci-dessus, il est impossible de dire où se trouve le bord de l'image. Ce problème ne se limite pas à la couleur blanche. Cela dépend de chaque site et des couleurs de thème qu'il utilise. Ainsi, si l'arrière-plan est rouge et que le bord de l'image est également rouge, ce même problème se produit. Mon script résout ce problème en utilisant le convert outil. La -frontière L'option ajoute une bordure à chaque fichier image avec une taille de 1 pixel. Cette option suffirait à elle seule mais je souhaite également définir la couleur en utilisant le -bordercolor option. Voici un exemple :

convert -bordercolor black -border 1 Screenshot-20210903202655.png

Ci-dessous, la même image avec une bordure. N'est-ce pas plus joli ?

Votre image est prête

J'utilise un for boucle pour parcourir le répertoire de capture d'écran. Il appelle la fonction process_img pour chaque dossier. La fonction gère à la fois la largeur et la bordure. Le code complet effectue des vérifications d'intégrité, par exemple en s'assurant que le fichier est bien une image.

process_img() {
     # verify that file is an image file, and then get dimensions
     if file "${SCREENSHOTS}"/"${1}" | grep -qE 'image|bitmap'; then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is an image"
         W=$(identify -format %w "${SCREENSHOTS}"/"${1}")
     else
         echo "File ${SCREENSHOTS}/${1} is not an image."
         W=0
     fi
 
     # resize and border
     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     else
         convert -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     fi
 }

La dernière étape du script consiste à enregistrer les fichiers traités dans un sous-répertoire appelé Ready , qui est déterminé par la variable nommée $READY . Cela préserve les fichiers originaux pour une utilisation ultérieure.

Utilisation

Prepimg.sh inclut la fonction d'aide attendue décrivant ses arguments et leur utilisation :

$ prepimg.sh -h
prepimg.sh Version 0.7 - written by Alan Formy-Duval
prepimg.sh [OPTIONS]
--verbose, -v Be verbose
--directory, -d Screenshot directory (default: /home/alan/Pictures/Screenshots)
--ready, -r Ready directory (default: /home/alan/Pictures/Screenshots/Ready)
--border, -b Border color (default: black)

Code et conclusion

Le code présenté dans l'article est incomplet et doit être considéré comme un pseudocode. Vous pouvez voir le script complet dans mon dépôt Git.

La suite ImageMagick est un ensemble puissant d'outils pour manipuler des images. Vous pouvez faire beaucoup plus de choses en plus des fonctions incorporées dans mon petit script. Le correspondant Jim Hall a également écrit récemment sur son utilisation pour redimensionner une image.

Que vous préfériez les scripts Bash ou le codage dans un autre langage tel que C ou Python, l'automatisation est d'une grande aide. Maintes et maintes fois, j'ai vu comment un peu de code peut réduire tant de maux de tête et nous permettre de mieux utiliser notre temps.


Linux
  1. Quel interpréteur Shell exécute un script sans Shebang ?

  2. Impossible de comprendre ce script. Baiser ?

  3. Appelez le script Python à partir de bash avec un argument

  4. Ajout à $PYTHONPATH avec un script bash

  5. Comment tuer le script python avec le script bash

Utilisez ce script Bash utile pour observer les étoiles

Comment écrire un script bash avec des exemples

Shell Scripting Partie I :Premiers pas avec les scripts bash

Bash Beginner Series #10 :Automatisation avec Bash

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques

Script bash pour la boucle expliqué avec des exemples