Script Linux : Création d’un GIF animé avec deux images (avec ou sans fondu) avec Imagemagick

Pour illustrer certains traitements photo il est intéressant de pourvoir présenter les deux deux états d’une image  Avant/Après

before_after_anim sans fondu

Deux nombreux Javascript existent pour réaliser cette fonction mais sur beaucoup de blogs (comme wordpress.com) il n’est pas possible d’ajouter ces scripts  si on n’est pas en auto-hebergement (comme avec une distribution wordpress.org) ou sur un espace plus ouvert au point de vue de la sécurité.

Pour les articles de ce blog j’ai donc écrit un script shell Linux pour fabriquer un GIF animé à partir de deux images illustrant l’état initial ou l’état final après traitement. J’ai ajouté une fonction optionelle de fondu entre les deux images. Pour exécuter ce script il est nécessaire d’avoir installé imagemagick

before_after_anim avec fondu
GIF animé avec fondu

Le source de ce script est téléchargeable sur GitHub https://github.com/lephotographelibre/LinuxPhotoWorkflow/blob/master/make_before_after_v1.1.sh

ou ci-dessous

#!/bin/bash
#
# make_before_after.sh
# Jean-Marc Digne - https://lephotographelibre.wordpress.com
#
# v0.8 - Release initiale
# v0.9 - Lecture nom des fichiers avant apres en entrée
# v1.0 - Tag Images Avant Après
# v1.1 - Avec fondu entre les deux images
#
echo "*** Before/After Animated GIF creation ***"
# Usage
display_usage() {
  echo " "
  echo "Ce script doit avoir au moins 2 arguments "
  echo "1- nom fichier avant modification"
  echo "2- nom fichier après modification"
  echo "3- optionel 1 si fondu entre les images de départ"
  echo " "
  echo "Le GIF animé before_after_anim.gif sera créé dans le répertoire dans lequel se trouve le fichier passé en premier paramètre "
  echo " "
  echo "\nUsage:\n$0 [arguments] \n"
}

# if less than 3  arguments supplied, display usage
if [  $# -le 1 ]
  then
  display_usage
  exit 1
fi

echo "* Fichier  avant modification = $1"
echo "* Fichier après modification = $2"

# 1- Mise au format 1024 des deux images

avant=$(basename $1)
apres=$(basename $2)
dir=$(dirname $1)

mkdir /tmp/thumbs

#mogrify  -format jpg -path thumbs  -auto-orient -auto-level -quality 80 -thumbnail 512x512 *.jpg
mogrify  -format jpg -path /tmp/thumbs  -auto-orient -auto-level -quality 80 -thumbnail 512x512 $1
mogrify  -format jpg -path /tmp/thumbs  -auto-orient -auto-level -quality 80 -thumbnail 512x512 $2

# Ajour tags Avant Apres dasn les images initiale et finale
convert /tmp/thumbs/$avant  -fill red -stroke black   -pointsize 30            -gravity south   -annotate 0 'Avant'    /tmp/thumbs/09.jpg
convert /tmp/thumbs/$apres  -fill red -stroke black   -pointsize 30            -gravity south   -annotate 0 'Après'    /tmp/thumbs/99.jpg

# 2- boucle de génération d'un blend progressif
i=10
j=100
while [ $i -ne 100 ] ; do
  composite -blend $ix$j% /tmp/thumbs/$avant /tmp/thumbs/$apres  /tmp/thumbs/$jx$i.jpg
  i=$(($i + 6))
  j=$(($j - 6))
done
rm /tmp/thumbs/$avant
rm /tmp/thumbs/$apres

# 3-Assemblage GIF Animé (si $3 est non null alors fondu)

if [ "$3" == "" ]; then
  echo "** Pas Fondu entre les images avant apres"
  convert -loop 0 -delay 300 /tmp/thumbs/09.jpg   -delay 300 /tmp/thumbs/99.jpg $dir/before_after_anim.gif

else
  echo "** Fondu entre les images avant apres"
  convert -loop 0 -delay 300 /tmp/thumbs/09.jpg -delay 25  /tmp/thumbs/*.jpg -delay 300 /tmp/thumbs/99.jpg $dir/before_after_anim.gif
fi

echo "* Fichier GIF Animé créé "
ls -al $dir/before_after_anim.gif

# 4- Nettoyage

rm /tmp/thumbs/*.jpg
rmdir /tmp/thumbs

# Fin
exit 0

L’utilisation de ce script est simple

## Aide en ligne
$ make_before_after_v1.1.sh
*** Before/After Animated GIF creation ***

Ce script doit avoir au moins 2 arguments
1- nom fichier avant modification
2- nom fichier après modification
3- optionel 1 si fondu entre les images de départ

Le GIF animé before_after_anim.gif sera créé dans le répertoire dans lequel se trouve le fichier passé en premier paramètre 

Usage: make_before_after_v1.1.sh [arguments] 

## Sans fondu
$ make_before_after_v1.1.sh ~/Bureau/avant1.jpg ~/Bureau/apres1.jpg
*** Before/After Animated GIF creation ***
* Fichier  avant modification = /home/jm/Bureau/avant1.jpg
* Fichier après modification = /home/jm/Bureau/apres1.jpg
** Pas Fondu entre les images avant apres
* Fichier GIF Animé créé
-rw-rw-r-- 1 jm jm 185075 juil. 22 11:15 /home/jm/Bureau/before_after_anim.gif

## Avec fondu
$ make_before_after_v1.1.sh ~/Bureau/avant1.jpg ~/Bureau/apres1.jpg 1
*** Before/After Animated GIF creation ***
* Fichier  avant modification = /home/jm/Bureau/avant1.jpg
* Fichier après modification = /home/jm/Bureau/apres1.jpg
** Fondu entre les images avant apres
* Fichier GIF Animé créé
-rw-rw-r-- 1 jm jm 1746549 juil. 22 11:17 /home/jm/Bureau/before_after_anim.gif

Cabourg - Char à Voile

1 commentaire

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s