Python Imaging Library PIL

Mise à jour: 25 juin 2009
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2009 Jean-Louis BICQUELET-SALAÜN

PIL Frequently-Asked Questions


FAQ Revised: Friday 26 June 2009 18:17:03


Table of Contents

1. generalité
2. information
3. transformation
4. manipulation

1. generalité

1.1. Qu'est-ce que PIL ?
La bibliothèque Python Imaging Library (PIL) ajoute des capacités de traitement d'image à votre interpréteur Python. Cette bibliothèque prend en charge de nombreux formats de fichiers, un puissant lot de fonctions de traitement d'image et de nouvelles capacités graphiques. L'information peut être trouvée sur ce site.


2. information

2.1. Comment obtenir les informations de format et de taille d'une image ?

On remarquera, l'utilisation du try/except afin de gérer correctement les erreurs. Par la suite, les exemples PIL vont à l'essentiel. Il serait bon de gérer les exceptions de cette manière.

from PIL import Image

file='cours.png'
try:
   im = Image.open(file)
   print file, im.format, "%dx%d" % im.size, im.mode
except IOError:
   pass

L'affichage donne ceci:

cours.png PNG 230x150 RGB


2.2. Comment visualiser une image avec PIL ?
from PIL import Image
import ImageFilter

im = Image.open('cours.png')
im.show()



3. transformation

3.1. Comment décomposer une image en couleur en ses 3 composantes rouge, vert, bleu ?
import Image
img = Image.open("presentation.png")  #  Ouverture de l'image
r,g,b = img.split()  # Récupération des différentes composantes de l'image
r.save('r.jpg') ## Sauvegarde des différents images composantes
g.save('v.jpg')
b.save('b.jpg')

Exemple:



3.2. Comment convertir le format d'image à l'aide de PIL?

Les formats possibles sont:

JPEG
PNG
BMP

exemple:

from PIL import Image

im = Image.open('cours.png')
im.save('cours.jpg', "JPEG")
im.save('cours.bmp', "BMP")

image JPEG BMP


3.3. Comment créer un thumbnail avec PIL?

Il suffit d'utiliser la fonction thumbnail de la manière suivante:

from PIL import Image

im = Image.open('aider.png')
im.thumbnail([128,128], Image.ANTIALIAS)
im.save('aider_small.png', "PNG")

ou

from PIL import Image

size=128,128
im = Image.open('aider.png')
im.thumbnail(size, Image.ANTIALIAS)
im.save('aider_small.png', "PNG")

image thumbnail


3.4. Comment créer les thumbnails des images de tout un répertoire ?
from PIL import Image
import glob, os

size = 128, 128

for infile in glob.glob("*.jpg"):
    file, ext = os.path.splitext(infile)
    im = Image.open(infile)
    im.thumbnail(size, Image.ANTIALIAS)
    im.save(file + "_thumbnail.jpg", "JPEG")


3.5. Comment effectuer une rotation à une image ?

On utilise rotate suivi de l'angle.

from PIL import Image

im = Image.open('explication.png')
out = im.rotate(45)
out.save('rotate.png')
image rotation


3.6. Comment effectuer une transformation géométrique d'une image ?

On utilise transpose.

Il existe des flag pour indiquer les opérations:

FLIP_LEFT_RIGHT
FLIP_TOP_BOTTOM
ROTATE_90rotation de 90°
ROTATE_180rotation de 180°
ROTATE_270rotation de 270°

Une transformation avec l'option ROTATE_90 est équivalent à une rotation avec la fonction rotate.

from PIL import Image

im = Image.open('explication.png')
out = im.rotate(45)
out.save('rotate.png')
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out.save('flip.png')
image transformation geométrique


3.7. Comment redimensionner une image ?
from PIL import Image

im = Image.open('explication.png')
out = im.resize((100,120))
out.save('resize.png'
image resultat


3.8. Comment filter une image ?

Le module ImageFilter permet d'appliquer plusieurs filtes. L'url imagefilter décrit ce qu'il est possible de faire (filtres min, max, médian, blur ...).

from PIL import Image
import ImageFilter

im = Image.open('cours.png')
out = im.filter(ImageFilter.BLUR)
out.save('blur.jpg', "JPEG")
out2 = im.filter(ImageFilter.MinFilter)
out2.save('min.jpg', "JPEG")
out3 = im.filter(ImageFilter.MedianFilter)
out3.save('median.jpg', "JPEG")
image blur
min median



4. manipulation

4.1. Comment créer une image avec son symétrique ?
L'exemple de ce combat de boxe, est un parfait exemple de manipulation. On crée une image de taille double, on génère une image symétrique axiale de l'image originale et on copie le tout dans la nouvelle image.
from PIL import Image

im = Image.open('boxe.png')
w,h=im.size
box = (0, 0, w, h)
src = im.crop(box)
out = im.resize((w*2,h))
out.paste(src,(0,0,w,h))
src=im.transpose(Image.FLIP_LEFT_RIGHT)
out.paste(src,(w,0,2*w,h))
out.save('combat.png')
image resultat


4.2. Comment créer une image avec un fond d'une couleur donnée?
Donnez la taille et la couleur soit sous forme de nom, soit en RVB.
from PIL import Image
import ImageDraw

im = Image.new("RGB", (400,200), "blue")
im = Image.new("RGB", (400,200), "#3FA03D")
draw = ImageDraw.Draw(im)
del draw
im.save("create.png", "PNG")
image générée


4.3. Comment dessiner dans une image ?
Les informations pour le dessin avec PIL se trouvent ici.
from PIL import Image
import ImageDraw

im = Image.new("RGB", (400,200), "lightgrey")
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill="red")
draw.rectangle(((100,100),(130,200)),fill="blue")
del draw
im.save("trace.png", "PNG")
image générée


4.4. Comment copier plusieurs modeles dans image ?
from PIL import Image
import ImageDraw


im = Image.new("RGB", (500,400), "white")
draw = ImageDraw.Draw(im)
into = Image.open("explication.png")
w,h=into.size
im.paste(into, (0,0,w,h))
im.paste(into, (300,0,300+w,h))
im.paste(into, (200,200,200+w,200+h))
del draw
im.save("dessin.jpg", "JPEG")
image resultat


4.5. Comment écrire du texte dans une image ?
#-*- coding:utf8 -*-
import sys
import Image
import ImageDraw
import ImageFont

txt = 'C\'est mon texte!'
txt2 = '??,??!'

font = ImageFont.truetype('verdanai.ttf',24)
font2 = ImageFont.truetype('simsun.ttc',24)
im = Image.new("RGBA",(300,200),(100,155,100))

draw = ImageDraw.Draw(im)

#draw.text( (0,50), u'??,??!', font=font)
draw.text( (0,50), unicode(txt,'UTF-8'), font=font)
draw.text( (0,100), unicode(txt2,'UTF-8'), font=font2)
del draw

im.save('font.png', "PNG")
image générée



Copyright (c) 2009 Jean-Louis BICQUELET

This list of questions and answers was generated by makefaq.