Redimensionnent d’image en ligne de commande avec Delphi

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

 

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.