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.modeexcept IOError: passL'affichage donne ceci:
cours.png PNG 230x150 RGBComment visualiser une image avec PIL ?
from PIL import Imageimport 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 Imageimg = Image.open('image.jpg')img0 = img.convert('L') # conversion en niveau de grisimg0.save('image.pgm') # enregistrement de l'imageComment décomposer une image en couleur en ses 3 composantes rouge, vert, bleu ?
import Imageimg = Image.open("presentation.png") # Ouverture de l'imager,g,b = img.split() # Récupération des différentes composantes de l'imager.save('r.jpg') ## Sauvegarde des différents images composantesg.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,128im = 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 Imageimport 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 Imageimport 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.sizebox = (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 Imageimport ImageDraw im = Image.new("RGB", (400,200), "blue")im = Image.new("RGB", (400,200), "#3FA03D")draw = ImageDraw.Draw(im)del drawim.save("create.png", "PNG")Comment dessiner dans une image ?
Les informations pour le dessin avec PIL se trouvent ici.
from PIL import Imageimport 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 drawim.save("trace.png", "PNG")Comment copier plusieurs modeles dans image ?
from PIL import Imageimport ImageDraw im = Image.new("RGB", (500,400), "white")draw = ImageDraw.Draw(im)into = Image.open("explication.png")w,h=into.sizeim.paste(into, (0,0,w,h))im.paste(into, (300,0,300+w,h))im.paste(into, (200,200,200+w,200+h))del drawim.save("dessin.jpg", "JPEG")Comment écrire du texte dans une image ?
#-*- coding:utf8 -*-import sysimport Imageimport ImageDrawimport 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")