Transformer des images avec un script batch et ImageMagick
Un script bash sous linux associé à imagemagick fait des merveilles pour le traitement d’images par lot.
Mais voilà, vous êtes parfois contraint d’utiliser un PC sous winchose et n’avez pas la possibilité d’installer un logiciel dessus.
Tout n’est pas perdu ! :-)
Tout d’abord téléchargez ImageMagick ici,la version ImageMagick-7.0.5-4-portable-Q16-x64.zip qui ne touchera pas à winchose.
Décompressez l’archive zip dans votre espace personnel dans un répertoire dédié de votre choix.
Vous devrez modifier la ligne SET chemin=C:\Users\Utilisateur\Documents\test\ImageMagick\ du scipt batch ci-dessous, pour lui indiquer le chemin que vous aurez choisi pour installer ImageMagick.
Ce script est commenté (lignes commençant par REM) pour vous permettre d’en comprendre le fonctionnement et affiche une aide à son lancement (premières lignes commençant par ECHO).
Pour l’utiliser, ouvrez une console DOS, placez vous dans le répertoire contenant les images à traiter, à l’aide de la commande cd et lancer l’exécution du script.
Ce script :
- Réduit la taille des images avec une même résolution.
- Inscrit le grossissement en blanc sur un flou noir, dans le coin inférieur droit de l’image.
- Inscrit l’échelle de l’image en blanc sur un flou noir, dans le coin inférieur gauche de l’image.
- Dessine dans une image tranparente, l’échelle en blanc sur un flou noir et la place dans le coin inférieur gauche de la photo. (au dessus de l’échelle)
@ECHO OFF
ECHO *******************************************************************************
ECHO * preparation_photos.bat *
ECHO *******************************************************************************
ECHO * Auteur : AlGau * Version 04-2017 *
ECHO *******************************************************************************
ECHO * Prépare les images comme suit : *
ECHO * - réduit la taille à une largeur de 385 pixels *
ECHO * - ajoute le grossissement utilisé, s'il est présent dans le nom de fichier *
ECHO * - ajoute l'échelle de l'image si le grossissement est connu *
ECHO *******************************************************************************
ECHO Utilisation :
ECHO -------------
ECHO [lecteur:][chemin]preparation_photos.bat [lecteur:][chemin][motif]
ECHO -
ECHO [lecteur:][chemin]
ECHO Spécifie le lecteur et le répertoire du script
ECHO [lecteur:][chemin][motif]
ECHO Spécifie le lecteur et le répertoire où sont placées les images à traiter
ECHO ainsi que le motif (filtre) à appliquer, *.JPG par défaut
ECHO [motif] voir :
ECHO https://fr.wikipedia.org/wiki/Expression_rationnelle#Principes_de_base
ECHO -------------
ECHO Pour ajouter le grossissement utilisé à l'image, le nom du fichier doit se
ECHO terminer par _X suivi de la valeur du grossissement.
ECHO Exemple : mon_image_X100.jpg , pour un grossissement de 100 utilisé.
REM paramètre de la ligne de commande
SET param=%1
REM chemin d'accès à ImageMagick
SET chemin=C:\Users\Utilisateur\Documents\test\ImageMagick\
IF "%param%"=="" SET param=*.jpg
REM supprimer la liste temporaire des fichiers (présent si la moulinette a été intérompue précédement)
If EXIST "Liste_des_fichiers.txt" DEL Liste_des_fichiers.txt
REM crée la liste des fichiers (passe par une liste pour éviter les fichiers créés en cours d'exécution)
FOR %%i in ("%param%") DO echo %%~i >> Liste_des_fichiers.txt
REM parcourt la liste de fichiers
FOR /f %%i in ('TYPE Liste_des_fichiers.txt') DO (call :subroutine1 "%%i")
REM supprimer la liste temporaire des fichiers
IF EXIST "Liste_des_fichiers.txt" DEL Liste_des_fichiers.txt
REM supprime l'image de l'échelle
IF EXIST "echelle.png" DEL echelle.png
GOTO :eof
GOTO :fin
REM réduction des images
:subroutine1
echo -
SET nom=%~n1
SET ext=%~x1
REM évite les noms de fichier avec d'éventuels espaces ou parenthèses de #@!
SET f=%nom%
SET "fx1=%f: =_%"
SET "fx2=%fx1:)=_%"
SET "fx3=%fx2:(=_%"
IF NOT "%nom%"=="%fx3%" echo ***** ATTENTION ! ***** renomage de [ %~1 ] en [ %fx3%%ext% ] pour permettre sont traitement.
IF NOT "%nom%"=="%fx3%" REN "%~1" %fx3%%ext%
SET nom=%fx3%
echo %nom%
REM détermination des dimensions de l'image
FOR /f "delims=" %%j in ('%chemin%identify -format %%w %nom%%ext%') do SET Largeur=%%j
FOR /f "delims=" %%j in ('%chemin%identify -format %%h %nom%%ext%') do SET Hauteur=%%j
echo Dimensions : %Largeur%x%Hauteur%
REM réduction de la taille de l'image et fixe la résolution à 96 pour obtenir des tailles effectives identiques
SET final=OK_%nom%%ext%
IF %Largeur% GTR %Hauteur% ( %chemin%convert -resample 96,96 -resize 385 "%nom%%ext%" "%final%" ) ELSE ( %chemin%convert -resample 96,96 -resize X385 "%nom%%ext%" "%final%" )
IF %Largeur% GTR %Hauteur% (echo largeur de %Largeur% réduite à 385 pixels) ELSE (echo hauteur de %Hauteur% réduite à 385 pixels)
REM détermination du grossissement de l'image
SET Grossissement=
FOR /f "tokens=2 delims=X" %%l in ('echo %nom%') do SET Grossissement=X%%l
IF "X%Grossissement%"=="X" (echo Sans grossissement) ELSE (echo Grossissement : %Grossissement%)
IF "X%Grossissement%"=="X" GOTO :fait2
REM écrit le grossissement de l'image
%chemin%convert %final% -gravity southeast -stroke #000C -strokewidth 2 -pointsize 20 -annotate +2+2 %Grossissement% -stroke none -fill white -annotate +2+2 %Grossissement% tmp_%final%
DEL %final%
RENAME tmp_%final% %final%
:fait2
REM détermination de la valeur de l'échelle en fonction du grossissement connu
SET Longueur=
IF "%Grossissement%"=="X25" (
SET Longueur=1000µm
GOTO :fait )
IF "%Grossissement%"=="X50" (
SET Longueur=500µm
GOTO :fait )
IF "%Grossissement%"=="X100" (
SET Longueur=250µm
GOTO :fait )
IF "%Grossissement%"=="X200" (
SET Longueur=125µm
GOTO :fait )
IF "%Grossissement%"=="X500" (
SET Longueur=50µm
GOTO :fait )
IF "%Grossissement%"=="X1000" (
SET Longueur=25µm
GOTO :fait )
:fait
IF "X%Longueur%"=="X" ( echo Sans échelle ) ELSE ( echo Echelle : %Longueur% )
IF "X%Longueur%"=="X" ( GOTO fait3 )
REM écrit l'échelle de l'image
%chemin%convert %final% -gravity southwest -stroke #000C -strokewidth 2 -pointsize 20 -annotate +2+2 %Longueur% -stroke none -fill white -annotate +2+2 %Longueur% tmp_%final%
REM Crée l'image transparente de l'échelle et l'inclut à l'image
IF NOT EXIST "echelle.png" (%chemin%convert -size 70x50 xc:none -stroke #000C -strokewidth 2 -draw "line 2,15 66,15 line 2,25 2,5 line 66,25 66,05" -stroke none -draw "fill white line 2,15 66,15 line 2,25 2,5 line 66,25 66,05" echelle.png)
%chemin%composite -gravity southwest echelle.png tmp_%final% %final%
DEL tmp_%final%
:fait3
:fin
GOTO :eof