May 19, 2024

Wiki

Python

Aide

edit SideBar

Search

Python Imaging Library


On apprend ici à se servir du module Image, qui permet toutes sortes de manipulations d'images, de la rotation à la modification pixel après pixel, en passant par l'application de filtres.

Module Image

Fonctionnalités de base

Importer le module

Avant de donner quelques illustrations des possibilités offertes par le module Image, montrons comment l'importer...

  >>> import Image

Ouvrir une image, la tourner, la convertir

  >>> im=Image.open('carres.png')
  >>> im=im.rotate(180)
  >>> im.save('carre.jpg','JPEG')

Expliquons ce bout de code :

  • La première ligne permet d'ouvrir le fichier carres.png, et stoquer le résultat dans la variable im.
  • La deuxième ligne fait subir une rotation à l'image contenue dans im.
  • La dernière ligne sauvegarde l'image ainsi construite dans le fichier carre.jpg, au format JPEG.

Affichage

Pour afficher l'image en cours de traitement

  >>> im.show(command = 'eog')

On peut remplacer l'argument par son visionneur préféré.

Obtenir des informations sur une image

On suppose que l'image est ouverte. Alors

  >>> print im.format, "%dx%d" % im.size, im.mode

affiche :

JPEG 1024x693 RGB,

ce qui correspond au format de l'image, à sa taille, et à son mode (1 pour noir et blanc, L pour niveaux de gris, RGB, etc.)

Manipulation de pixels

Un exemple suffit...

  >>> from Image import *
  >>> toto=new('1',(256,256), color=255)
  >>> print toto.getpixel((15,34))
  >>> toto.putpixel((128,128),0)
  >>> toto.save('letoto.jpg','JPEG')

Les méthodes de la bibliothèque

Pour connaître les méthodes appliquable à un objet Image, et l'utilisation avancée de ce module, aller ici. La lecture, au moins partielle, de ces pages, est vivement conseillée.

Exemples

Symétrie à une partie d'image

Donnons une première illustration des possibilités du module Image : faire une symétrie à une partie d'une image (deuxGraphes.png)

  >>> import Image
  >>> im=Image.open('deuxGraphes.png')
  >>> box = (100, 100, 400, 400)
  >>> region = im.crop(box)
  >>> region = region.transpose(Image.ROTATE_180)
  >>> im.paste(region, box)
  >>> im.show()

Expliquons ce code...

  • Dans la troisième ligne, on sélectionne une boîte (entre les pixels de coordonnées (100 ;100) et ceux de coordonnées (400 ;400)).
  • Dans la quatrième ligne, on met dans region la partie d'image corespondant à cette boîte (faire region.show() pour s'en convaincre).
  • Dans la cinquième ligne, on remplace la region considérée par sa rotation de 180 degré.
  • Dans la sixième ligne, on recole cette région dans notre image, à la position souhaitée.

Création d'imagettes (thumbnails)

Le but est d'obtenir des imagettes (128x128 pixels) de l'ensemble des images passées en argument du programme toto (saisi dans un éditeur de texte) :

Le code

  #!/usr/bin/python
  import os, sys
  import Image
  for fichierEntree in sys.argv[1 :] :
      fichierSortie = os.path.splitext(fichierEntree)[0] + ".thumbnail"
      if fichierEntree != fichierSortie :
          try :
              im = Image.open(fichierEntree)
              im.thumbnail((128, 128))
              im.save(fichierSortie, "JPEG")
          except IOError :
              print "Ne peut creer une imagette pour ", fichierEntree

Explications

Dans ce qui précède,

  • On commence par préciser où se trouve l'interpréteur python, puis quels modules importer.
  • Dans la quatrième ligne, on parcours les fichiers passés en argument de notre programme toto.
  • Dans la cinquième ligne, on donne un nom au fichier de sortie : il possédera le nom du fichier d'entrée (sans son extension), auquel on rajoute l'extension .thumbnail.
  • Le if n'est présent que pour s'assurer que l'on ne va pas faire une imagette d'une imagette.
  • Enfin, on essaye (try) :
    • d'ouvrir le fichier d'entrée,
    • d'en faire une imagette (im.thumbnail),
    • puis de le sauvegarder au nom voulu...
  • Et si on rencontre un problème, on affiche le message de la dernière ligne.

Exécution

Reste à changer les droits d'exécution du fichier, dans un shell :

  $ chmod u+x toto

Puis à l'exécuter, en passant en argument les fichiers dont on souhaite obtenir des imagettes...

  $ ./toto *

Page Actions

Recent Changes

Group & Page

Back Links