Atelier MS-DOS - Utilisation de irfanView en ligne de commande.
Réponse AJAX

Objectif...

Cet atelier a pour objectif d'utiliser le visualiseur d'images IrfanView en ligne de commande, pour manipuler des images à partir du DOS, puis pour automatiser ces modifications à partir de Visual Basic.

Installation d'IrfanView
et consultation de l'aide

Si IrfanView n'est pas installé sur votre ordinateur (c.a.d s'il ne figure pas dans c:\program files), alors installez-le à partir de www.irfanview.com. S'il était déjà installé, il est conseillé (mais pas indispensable) de vérifier que la version soit la dernière disponible.

De façon à pourvoir exécuter IrfanView quelque soit l'emplacement courant sous DOS, il faut rajouter le chemin d'IrfanView dans la variable path du DOS. Vous devez faire ceci grâce aux commandes suivantes :

A partir du menu démarrer, lancez IrfanView Help, cherchez command line options, et gardez cette doc dans un coin de l'écran (ou apprenez-la par coeur). Elle contient tous les paramètres de IrfanView en ligne de commande.

En savoir plus sur...IrfanView

IrfanView est un visualiseur d'image, complètement gratuit. Depuis, il a évolué pour prendre en charge d'autres types de contenus. Il est ainsi capable de lire des vidéos, des documents textes, etc. Il possède également des fonctions très basiques de traitements d'images, dont les plus intéressantes sont la conversion et le redimensionnement.

Irfan est le prénom du concepteur bosniaque du logiciel.

Préparer une image
et l'emplacement de travail

Choisissez une image quelconque.

Placez-vous dans votre répertoire de travail avec la commande Z:\ (où Z: représente votre répertoire de travail, à adapter le cas échéant).

Créez un répertoire images avec la commande MD images.

Placez-vous dans ce répertoire avec la commande CD images. A ce stade, l'invite de commande doit être Z:\images>.

Copiez ici l'image que vous avez choisi grâce à la commande COPY emplacement d'origine\nomimage :

Vérifiez que vous pouvez afficher l'image grâce à la commande i_view32 nom-de-l'image.

Premier tests : affichage de l'image convertie en niveau de gris,
conversion de l'mage modifiée

A partir de maintenant je suppose que votre image s'appelle image.jpg. Vous devez remplacer image.jpg par le vrai nom de votre image. Essayez les commandes suivantes :

Visualiser l'image en niveau de gris i_view32 image.jpg /gray
Dupliquer l'image en niveau de gris i_view32 image.jpg /gray /convert=imagegray.jpg
i_view32 imagegray.jpg
Convertir l'image d'origine i_view32 image.jpg /gray /convert=image.jpg
i_view32 image.jpg

Vous remarquez :

Essayer d'autres options de IrfanView

De la même façon, testez les options suivantes, en respectant tout le temps la syntaxe suivante (sauf pour /capture):

i_view32 image.jpg /option_a_tester /convert=image2.jpg

/crop=(x,y,w,h) Pour extraire un morceau de l'image (x et y représentent la position en haut à gauche de l'extrait, w et h représentent la largeur width et la hauteur height de la zone à extraire).
/resize=(w,h) Pour redimensionner une image. w représente la largeur en pixel (par exemple 300) ou en pourcentage (par exemple 50p). Si vous souhaitez conserver les proportions de l'image (conseillé), rajoutez l'option /aspectratio.
/resample=(w,h) Pareil, mais avec une meilleure qualité car l'algorithme appliqué est plus complexe. Cela se constate lorsqu'on rétrécit considérablement l'image.
/capture Facile, il suffit de tester. Attention ! /capture ne s'applique pas à une image. La syntaxe est donc tout simplement : i_view32 /capture.
/invert Facile, il suffit de tester.
/bpp=BitsPerPixel

BitPerPixel représente le nombre de bits sur lequel sont codés les couleurs. Par exemple : 4 bits permettent de stocker 16 couleurs par point (à convertir en bmp car jpeg n'accepte que 24 bits) :

i_view32 image.jpg /bpp=4 /convert=image2.bmp

/swap_bw Facile, il suffit de tester.
/rotate_r Facile, il suffit de tester.

La plupart des autres fonctions ne servent pas à manipuler des images, mais à paramétrer l'application elle-même.

Automatisation à partir de Visual Basic ou PHP

Nous allons faire une application en Visual Basic (ou C#, ou ce que vous voulez) qui permet de parcourir toutes les images jpeg contenus dans z:\images, et de créer les mosaïques correspondantes (c'est à dire de rétrécir toutes les images à une taille unique).

Voici ce que vous devez faire :

1ère étape
  • Lancer Visual Basic (ou le langage de votre choix),
  • créez une application de type console,
2ème étape Votre code doit créer le répertoire z:\Images\petites, grâce à l'instruction Visual Basic mkdir :
  mkdir "z:\images\petites"
Pour ne pas obtenir une erreur lors du deuxième lancement de l'application, on précise qu'on crée le répertoire que s'il n'existe pas déjà :
  if dir("z:\images\petites", vbDirectory)="" then mkdir "z:\images\petites"
3ème étape

Votre code Visual Basic doit, dans une boucle While .. Wend, parcourir toutes les images jpeg (c'est à dire avec l'extension .jpg) contenues dans z:\Images. Ce parcours se fait grâce à l'instruction Visual Basic DIR :
fichierimage = dir("z:\images\*.jpg")
while fichierimage <> ""
  ' traitement de l'image
  fichierimage = dir
wend

4ème étape

Pour chaque image, on doit lancer la commande MS-DOS qui va la rétrécir. La commande MS-DOS est la suivante :

"c:\program files\irfanview\i_view32" z:\images\fichierimage /resize=(80,80) /aspectratio /convert=z:\images\petites\fichierimage

Pour appelez cette commande à partir de Visual Basic, vous utiliserez l'instruction Visual Basic Shell. Ceci est à placer, dans le code ci-dessus, à la place du commentaire ' traitement de l'image.

Shell "commande MS-DOS".

N'oublier pas que des guillemets contenus dans les guillemets doivent être doublés. Par exemple, si je veux afficher "bonjour", je fais msgbox """bonjour""".

5ème étape Copiez quelques images dans le répertoire Z:\images, puis testez votre programme. Si cela marche, vous devez retrouvez vos images en taille réduites, dans Z:\Images\petites.
Testez...  

Copiez ici l'intégralité de votre code Visual Basic :

Votre réponse n°2

Améliorez ensuite votre programme, en faisant en sorte que :