Généralités
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.
Informations
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
Comment visualiser une image avec PIL ?
from PIL import Image
import ImageFilter
im = Image.open('cours.png')
im.show()
Transformations
Convertir une image au format pgm
Les images au format PGM (portable graymap file format) sont codées par des valeurs représentant les niveaux de gris de leurs pixels. Ces valeurs sont comprises entre 0 (noir) et 255 (blanc) et représentent différentes teintes de gris. C’est un format d’image matricielle, sans compression, assez peu utilisé mais qui présente l’intérêt d’être facilement manipulé.
Commencez par copier sur votre Bureau une image en couleur de format quelconque (JPEG, PNG, BMP, GIF, PPM. . .).
Il faut convertir cette image au format PGM
Avec python3 et son module PIL (Le plus formateur)
from PIL import Image
img = Image.open('image.jpg')
img0 = img.convert('L') # conversion en niveau de gris
img0.save('image.pgm') # enregistrement de l'image
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:
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")
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")
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")
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')
Comment effectuer une transformation géométrique d'une image ?
On utilise transpose.
Il existe des flag pour indiquer les opérations:
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')
Comment redimensionner une image ?
from PIL import Image
im = Image.open('explication.png')
out = im.resize((100,120))
out.save('resize.png'
Comment filtrer 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")
Manipulations
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')
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")
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")
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")
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")