PDA

Afficher la version complète : [Bash] Redimensionner et watermarker ses photos



Heero_Yuy
23/04/2012, 21h09
Hello à toutes la communauté,

Vous êtes photographes (amateurs ou professionnels), utilisez GNU/Linux et les logiciels libres pour traiter vos photos, et avez un blog ou un site style book pour montrer votre travail à la Terre entière ?
Ce script pourrait vous intéresser. Bon, je sais que d'autres outils existent, mais bon, rien n'empêche de se créer ses propres outils.

Tout d'abord, ce script s'appelle Watermark Your Digital Photos (WYDP pour les intimes).
Avant d'entrer dans les détails du fonctionnement de ce script, voici les prérequis :

un système GNU/Linux
ImageMagick
un terminal


(2 fois rien quoi).

Copier/coller le code suivant dans un fichier wydp.sh, dans un dossier quelqu'il soit. Chez moi, le dossier se nomme WYDP.



#!/bin/bash

#
# wypd.sh
# This file is part of Watermark Your Digital Photos
#
# Copyright (C) 2012 - Heero Yuy
#
# Watermark Your Digital Photos is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Watermark Your Digital Photos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Watermark Your Digital Photos. If not, see <http://www.gnu.org/licenses/>.
#


### SOME VARIABLES ###
# Program name
PROGNAME=$(basename "$0")

# Watermarked Image
RESOLUTION=72
UNIT='PixelsPerInch'
IMGSIZE=1000 # Height for a portrait or Width for a landscape

# Watermark
GRAVITY='SouthWest'
WMFILENAME="Copyright.png"

# Workspace
JPEGDIR='JPEG'
THUMBSDIR='Thumbs'
ORIGINDIR=
FINALDIR=
MAINDIR=


### HELP FUNCTION ###
function _help
{
echo "sh $PROGNAME /path/to/your/digital/photos"
exit 0
}


# If no argument is passed in the command line, work in the current directory
# else work in the directory passed in the command line
if (( $# == 0 ))
then
MAINDIR=`pwd`
elif (( $# == 1 ))
then
if [[ "$1" = --help || "$1" = -h ]]
then
_help
else
MAINDIR="$1"
fi
elif (( $# > 1 ))
then
echo "TOO MANY ARGUMENTS !"
echo "See $PROGNAME --help or $PROGNAME -h for more information."
exit 1
fi

### MAIN PROGRAM ###
echo "==============================="
echo " WATERMARK YOUR DIGITAL PHOTOS "
echo "==============================="

echo

# Create a temporary directory which will be deleted at the end of the script
echo "Creating temp directory..."
TMPDIR=$(mktemp -d "$MAINDIR"/XXXXXXXXXX)

ORIGINDIR="$MAINDIR"/$JPEGDIR
FINALDIR="$MAINDIR"/$THUMBSDIR

# $ORIGINDIR directory does not exist ? Quit the app
if [ ! -d "$ORIGINDIR" ]
then
echo "[Error] \"$ORIGINDIR\" : no such file or directory"
exit 2
fi

# $FINALDIR directory does not exist ? Create it
if [ ! -d "$FINALDIR" ]
then
echo "Creating the $FINALDIR directory..."
mkdir "$FINALDIR"
fi

# Create the watermark in the temporary directory
#echo "Creating Watermark..."
#convert -size 1000x300 xc:grey30 -font $WMFONT -pointsize $WMFONTSIZE -gravity $GRAVITY \
# -draw "fill grey70 text 0,0 '$WMTEXT'" \
# $TMPDIR/stamp_fgnd.png
#convert -size 1000x300 xc:black -font $WMFONT -pointsize $WMFONTSIZE -gravity $GRAVITY \
# -draw "fill white text 1,1 '$WMTEXT' text 0,0 '$WMTEXT' fill black text -1,-1 '$WMTEXT'" \
# +matte $TMPDIR/stamp_mask.png
#composite -compose CopyOpacity $TMPDIR/stamp_mask.png $TMPDIR/stamp_fgnd.png $TMPDIR/$WMFILENAME
#mogrify -trim +repage $TMPDIR/$WMFILENAME

# Resize all your photos and apply the watermark to them
for each in "$ORIGINDIR"/*.jpg
do
FILENAME=$(basename "$each")
# Resize photos
echo "Resizing $each..."
convert -units $UNIT -density $RESOLUTION -resize $IMGSIZE "$each" "$TMPDIR/$FILENAME"
#echo "$TMPDIR"/`basename $each`
echo "Applying the watermark to $FILENAME..."
composite -gravity $GRAVITY -geometry +0+0 ./Copyright/$WMFILENAME "$TMPDIR/$FILENAME" "$FINALDIR/$FILENAME"
#convert +polaroid $FINALDIR/`basename $each` $FINALDIR/polaroid-`basename $each`
done

echo

# Delete temporary directory
echo "Removing temp directory..."
rm -R "$TMPDIR"

exit 0



(j'ai pas réussi à importer mon fichier .sh, c'est normal ? )

Dans ce dossier, créer un sous-dossier Copyright qui contiendra un fichier image au format PNG et de taille 95x15pixels (ces dimensions sont perso, vous pouvez mettre ce que vous voulez). Ce fichier devra se nommer Copyright.png. Par exemple, chez moi, cette image est un rectangle noire aux coins arrondis, et on y trouve la mention (c) Heero Photographie.

Voilà pour la fin des prérequis.
Ah, non, j'ai encore une chose à vous dire. Comment je travaille en photo. Ca ne paraît pas important, mais vous comprendrez par la suite que oui, c'est TRES important.

Alors, le début d'une séance de travail consiste en la prise de vue. Je shoot en RAW (format NEF sur mon NIKON D5100). Une fois la séance terminée, je décharge ma carte mémoire sur le disque dur de mon ordi. Pour cela, je dispose d'un dossier Photos (sur ma partition de données), dans lequel je crée un sous-dossier dans ce format yyyymmdd - lieu de la seance (où yyyy = année sur 4 chiffres, mm = mois sur 2 chiffres et dd = jour sur 2 chiffres - exemple, la date d'aujourd'hui donne 20120423).
Dans ce sous-dossier, je crée un nouveau dossier nommé RAW dans lequel je place toutes les photos RAW. A côté de ce dossier RAW, je crée un dossier JPEG. Ce dernier reste vide pour le moment.
Vient la phase de développement de mes RAW. J'utilise le logiciel DarkTable. Une fois mes photos développées, je les exporte dans le dossier JPEG.

Et maintenant, le plus important, l'utilisation de WYDP.
Dans un terminal, il vous suffit de lancer la commande suivante :



cd /repertoire/vers/wydp
sh wydp.sh /repertoire/vers/le/dossier/racine/de/votre/seance/photo


Un exemple valant plus que 1000 mots. Chez moi, WYDP est installé dans le répertoire /media/Devel/Workspace/WYDP, je saisis donc les commandes suivantes dans mon terminal :



cd /media/Devel/Workspace/WYDP
sh wydp.sh /media/Data/Photos/20120423 - Tour Eiffel

(par exemple, mes photos sont dans /media/Data/Photos/20120423 - Tour Eiffel)

Mais que fait WYDP ?
Et bien, il redimensionne chacune des photos présentes dans le dossier /media/Data/Photos/20120423 - Tour Eiffel/JPEG (c'est là que le dossier JPEG est important) à la taille de 1000pixels (si la photo est en portrait, c'est la hauteur qui prend la valeur de 1000 pixels, si la photo est en paysage, c'est la largeur qui est modifiée à 1000 pixels - et cela est fait automatiquement).
Puis, il applique le Watermark (Copyright) présent dans le dossier /media/Devel/Workspace/WYDP/Copyright.

Et c'est tout. Bien sûr, vous pouvez modifier le script pour qu'il corresponde à vos besoins. Et si vous avez besoin d'un coup de mains pour le faire, n'hésitez pas ;)