Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Definitions

Pour bien utiliser le module PIL, il faut d'abord en comprendre son vocabulaire.

Bande

Les images monochromes, ou en niveau de gris, ont une seule bande, les images RGB en ont 3, et les images CMYK, RGBA en ont 4, etc.

Mode

Le mode d'une image décrit de quelle manière sont représentés ses couleurs. Chaque mode est symbolisé par une chaîne de caractères :

ModeBandesdescription
"1"1Noir et blanc (monochrome), un bit par pixel.
"L"1Niveaux de gris, un octet par pixel.
"P"1Utilisation d'une palette : un octet par pixel, avec une palette de la classe ImagePalette faisant la traduction pixels->couleurs. Mode expérimental.
"RGB"3Mode RVB pur (Rouge-Vert-Bleu), trois octets par pixel.
"RGBA"4Mode RVB pur, avec une bande de transparence : quatre octets par pixel. Le canal "alpha" A varie de 0 (transparent) à 255 (opaque).
"CMYK"4Cyan-Magenta-Jaune-Noir, quatre octets par pixel.
"YCbCr"3Format vidéo de couleur. Trois octets par pixel.
"I"1Pixels = entiers codés sur 32 bits.
"F"1Pixels = flotants codés sur 32 bits.

Taille (size)

La taille d'un objet est le couple (hauteur,largeur) de cet objet, en pixels.

Coordonnées (coordinates)

Les coordonnées d'un pixel sont celles de son point supérieur gauche. L'axe des x est orienté vers la droite, celui des y vers le bas.

Angles

Les angles sont donnés en degrés. L'axe polaire est l'axe des abscisses, et le sens est trigonométrique.

Bboxes (bounding boxes)

Une bbox (bounding box) est une partie rectangulaire de l'image. Elle est définie par un quadruplet (x0, y0, x1, y1), où (x0, y0) est le coin supérieur gauche dudit rectangle, et (x1, y1) en est son coin inférieur droit.

En général, le point (x0, y0) est inclus, mais pas (x1, y1).

Les couleurs

On peut fixer la couleur d'un pixel de différentes manières :

  • Pour les images simple-bande, la couleur est la valeur du pixel. Par exemple,
    • dans le mode "1", la couleur est un chiffre : 0 pour noir, 1 pour blanc.
    • dans le mode "L", la couleur est représentée par un entier, de 0 (pour le noir), à 255 (pour le blanc).
  • Pour les images multi-bandes, la couleur est représentée par un tuple avec une valeur par bande. Par exemple, dans une image "RGB", le tuple (255,0,0) est le rouge pur.
  >>> import Image as im
>>> dd=im.new('RGB',(50,50))
>>> dd.putpixel((5,5),(0,0,255))
>>> dd.show()
  • Il est possible d'utiliser les noms de couleurs de la forme #rrggbb, où rr est la composante rouge écrite à l'aide de deux chiffres hexadécimaux (comme dans le CSS). Par exemple, "#ffff00" est le jaune (plein rouge et plein vert).
  >>> dd=im.new('RGB',(50,50),color='#ffff00')
>>> dd.show()
  • On peut aussi donner les valeurs RGB des pixels en décimaux, en les écrivant ainsi : "rgb(R,G,B)". Par exemple, "rgb(0,255,0)" est le vert.
  >>> dd=im.new('RGB',(50,50),color='rgb(90,50,50)')
>>> dd.show()
  • On peut encore donner ces valeurs RGB en pourcentages : "rgb(R%,G%,B%)". Par exemple, pour un gris clair : "rgb(85%,85%,85%)".
  >>> dd=im.new('RGB',(50,50),color="rgb(85%,85%,85%)")
>>> dd.show()
  >>> dd=im.new('RGB',(50,50),color="hsl(180,100%,50%)")
>>> dd.show()
  • H est la teinte (hue), qui est représentée par un angle en degrés : 0 pour rouge, 60 jaune, 120 pour vert, etc.
  • S est la saturation (l'intensité, la pureté de la couleur) : de 0 à 100%.
  • L est la valeur (la brillance) de la couleur : 0% le noir, 50% pour le normal, et 100% pour le blanc : par exemple, "hsl(180,100%,50%)" est du pur cyan.
  • Sur les systèmes Unix, on peut aussi utiliser les noms des couleurs (tels qu'ils sont décrits dans le fichier /etc/X11/rgb.txt) : "white", "DodgerBlue", "coral", etc.
  >>> dd=im.new('RGB',(50,50),color='coral')
>>> dd.show()

Ces différentes définitions de couleur sont applicables à toute méthode ayant un attribut de la forme color : c'est le cas de la méthode paste, pas de putpixel

  >>> dd.paste((75,25,25),box=(10,10,20,20)) # ok
  >>> dd.putpixel((35,35),(75,25,25)) # Là aussi

  >>> dd.paste("rgb(75%,25%,25%)",box=(10,10,20,20)) # Pas de soucis
  >>> dd.putpixel((35,35),"rgb(75%,25%,25%)")
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.5/site-packages/PIL/Image.py", line 1234, in putpixel
      return self.im.putpixel(xy, value)
  SystemError: new style getargs format but argument is not a tuple

Filtres (filters)

Certaines opérations qui réduisent le nombre de pixels, tels que la création d'imagettes (thumbnail), peuvent utiliser différents filtres pour calculer les valeurs des nouveaux pixels.

Ces filtres incluent :

NEAREST
Utiliser la valeur du pixel le plus proche.
BILINEAR
Réaliser une interpolation linéaire sur un bloc 2x2 de pixels adjacents.
BICUBIC
Réaliser une interpolation cubique sur un bloc de 4x4 pixels.
ANTIALIAS
Les pixels du voisinage sont rééchantillonnés pour trouver la nouvelle valeur du pixel considéré.

Page Actions

Recent Changes

Group & Page

Back Links