PIL Python Imaging Library
1. généralité
1.1. Qu'est-ce que PIL ? 2. information
2.1. Comment obtenir les informations de format et de taille d'une image ?
2.2. Comment visualiser une image avec PIL ? 3. transformation
3.1. Comment décomposer une image en couleur en ses 3 composantes rouge, vert, bleu ?
3.2. Comment convertir le format d'image à l'aide de PIL?
3.3. Comment créer un thumbnail avec PIL?
3.4. Comment créer les thumbnails des images de tout un répertoire ?
3.5. Comment effectuer une rotation à une image ?
3.6. Comment effectuer une transformation géométrique d'une image ?
3.7. Comment redimensionner une image ?
3.8. Comment filter une image ? 4. manipulation
4.1. Comment créer une image avec son symétrique ?
4.2. Comment créer une image avec un fond d'une couleur donnée?
4.3. Comment dessiner dans une image ?
4.4. Comment copier plusieurs modeles dans image ?
4.5. Comment écrire du texte dans une image ?
1. généralité
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 http://www.pythonware.com/products/pil/
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_90 rotation de 90°
ROTATE_180 rotation de 180°
ROTATE_270 rotation 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
http://www.pythonware.com/library/pil/handbook/imagedraw.htm
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 résultat
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")