Utilitaire de redimensionnement d’image en ligne de commande :
imagegick.exe test.jpg test2.jpg 400 0 Resized from 1280 x 800 to 400 x 250
Tout le monde ou presque sait redimensionner une image avec un logiciel que ce soit Paint Photofiltre ou Paint Shop Pro.
Mais l’opération est fastidieuse : il faut ouvrir le logiciel (logiciel conséquent, dont le lancement est assez long), ouvrir le fichier jouer de la souris dans les menus sauvegarder sous un autre nom etc…
Il arrive dans quelques cas que l’on doive le faire pour un grand nombre de photos ou encore qu’on veuille le faire en lançant une seule ligne de commande.
Sous Linux rien de plus simple il existe un utilitaire open-source en ligne de commande pour cela qui est extrêmement puissant et se nomme ImageMagick mais sous windows : point de salut, je n’ai pas connaissance de l’existence d’un tel utilitaire.
D’où l’idée dans développer un.
Mon premier réflexe fut de tenter de le développer un Python puisque c’est un environnement léger, simple à installer, compatible avec tous les OS et qu’il existe une bibliothèque de traitement des images nommée python-resize-image qui est très bien documentée sur internet.
Malheureusement, malgré de multiples tentatives avec différentes versions de python et sur différentes versions de windows XP (mon besoin imposait que le programme fonctionne sur Windows XP) il ne m’a jamais été possible de la faire fonctionner. En cherchant sur internet je me suis même aperçu que nous sommes des milliers dans ce cas (pas seulement sur Windows XP) et qu’aucune solution na été apportée.
Quand ça commence comme ça on revient au fondamentaux dans mon cas c’est le Pascal Object avec Delphi (ou Lazarus selon mon humeur)
Loin de moi l’idée de faire un clone d’ImageMagick car ce dernier est extrêmement puissant et sait faire presque tout ce qu’on peut imaginer avec une image même animée.
Mon programme que j’ai nommé ImageGick va se contenter (et c’est déjà pas mal) de :
- traiter des images au format JPEG
- savoir redimensionner « en force » (sans respect des proportions)
- savoir redimensionner la largeur seulement en respectant les proportions
- savoir redimensionner la hauteur seulement en respectant les proportions
- Indiquer qu’elles étaient les dimensions d’origine de l’image
- Indiquer qu’elles sont les dimensions de l’image redimensionnée
- Fournir systématiquement des exemples d’utilisation
- En cas de mauvaise commande indiqué ce qui ne va pas.
Ce que je souhaitais c’est qu’il ne fonctionne pas en mode graphique : mais uniquement en ligne de commande.
Donc la création du projet se fait via « Nouveau » – « Projet » -« Application en mode console »
Le code fournis a été réalisé avec Delphi XE8 sachant qu’il y a eu pas mal de changement avec les versions XE par rapport aux précédentes si vous voulez le modifier avec une version ancienne de Delphi (ou de Lazarus) il vous faudra changer le nom de certaines bibliothèques dans la clauses « uses ».
Le code est assez simple : il comporte d’abord un certain nombre de fonctions qui permettent :
- L’ouverture en mémoire d’une image
- La sauvegarde en fichier d’une image en mémoire
- La détection des dimensions d’origines
- Le redimensionnement d’une image en mémoire.
Le programme principal lui :
- Vérifie les paramètres en entrée
- Vérifier que le fichier en entrée existe
- Vérifie que le dossier du fichier de sortie existe
- Vérifie que les nouvelles largeurs et hauteurs sont fournis
- Lance le processus de redimensionnement
- Affiche un compte rendu.
Le programme et son code source sont téléchargeables ici :
Vous trouverez l’exécutable dans le sous dossier win32\release\
Utilisation :
Usage : imagegick.exe infile.jpg outfile.jpg newwith Ex: imagegick.exe infile.jpg outfile.jpg 800 600 pour forcer 800x600 comme nouvelle taille Ex: imagegick.exe infile.jpg outfile.jpg 0 600 pour forcer 600 comme nouvelle hauteur et calculer la nouvelle largeur pour maintenir l'aspect Ex: imagegick.exe infile.jpg outfile.jpg 1024 0 pour forcer 1024 comme nouvelle largeur et calculer la nouvelle hauteur pour maintenir l'aspect
Exemple de sortie dans le cas où on veut que la nouvelle image ait une largeur de 400 en gardant les proportions
infile : test.jpg outfile : test2.jpg new width : 400 new height : 0 new size : 400 x 0 Resized from 1280 x 800 to 400 x 250