Module PIL
- Fonctions
- Mode d’images
- taille photo
- Affichage photo
- Conversion d’images
- Décomposition d’images
- Redimensionnement et découpe
.
FONCTIONS :
.
Image est la classe la plus importante du module PIL.
Fonction | Effet |
---|---|
im=Image.open(fichier)
|
pour ouvrir un fichier contenant une image, on utilise la fonction (ligne 5)). |
im.format()
|
Donne le format de l’image : png, jpeg, bmp,…. |
im.size()
|
La taille est un tuple (largeur hauteur) |
im.mode()
|
Donne le mode l’image : RGB, RGBA ,L, P |
im.show()
|
Affiche l’image. |
im.save("nom","format")
|
Sauvegarde l’image avec le nom et le format choisit. |
.
MODE D’IMAGES :
.
Modes d’images :
Le mode d’une image définit le type et la profondeur d’un pixel dans l’image. La sortie actuelle soutient le suivant
Modes standard :
- 1 (pixels de 1 particule, noirs et blancs, stocké avec un pixel
- par octet)
- L (pixels de 8 particules, noir et blanc)
- P (pixels de 8 particules, dressés la carte à un autre mode utilisant une palette colorée)
- RGB (3x8-pixels)
- RGBA (4x8-pixels, couleur avec masque de transparence)
- CMYK (4x8-bit-pixels)
- JPEG
PIL fournit aussi l’appui limité pour quelques modes spéciaux, y compris LA (L avec l’alpha), RGBX (la vraie couleur avec la remplissage)
Et RGBA (vraie couleur avec alpha).
.
MODE D’IMAGES :
.
Taille d’une image :
il faut installer python -m pip install --upgrade Pillow
programme | Résultat |
---|---|
#0805 taille photo.py
from PIL import Image from os import* #nom du repertoire où l'on se situe repertoire=getcwd() fichier=repertoire+'/1.png' im = Image.open(fichier) print ("Nom du fichier : ",fichier,'\n'\ "Format :" ,im.format,'\n'\ "taille","%dx%d" % im.size,'\n'\ "Mode : ",im.mode) print(fichier,im.format,im.size,im.mode) |
Nom du fichier : D:\python\python 2017\08 manipuler fichiers/1.png Format : PNG taille 1000x640 Mode : RGBA D:\python\python 2017\08 manipuler fichiers/1.png PNG (1000, 640) RGBA |
.
AFFICHAGE D’UNE IMAGE :
.
Affichage d’une image :
programme | Résultat |
---|---|
from PIL import Image try: im = Image.open('1.png') im.show() except: pass |
.
CONVERSION D’IMAGES :
.
Conversion d’images :
.
programme | Résultat |
---|---|
from PIL import Image from os import* #nom du repertoire où l'on se situe repertoire=getcwd() print(repertoire) #construction de la liste des fichiers du répertoire liste_fichiers =listdir(repertoire) for i in range(len(liste_fichiers)): print(liste_fichiers[i]) repertoire1=input(" Donner le répertoire à explorer : ")
chdir(repertoire+'/'+repertoire1) #On se place dans un nouveau repertoire #et on refait une nouvelle liste de fichiers liste_fichiers =listdir(repertoire) print('type',type(liste_fichiers)) for i in range(len(liste_fichiers)): print(liste_fichiers[i]) dossier=getcwd() liste_fichiersd =listdir(dossier) for i in range(len(liste_fichiersd)): print(liste_fichiersd[i]) print(" On est dans le dossier :"+dossier) #utilisation de system print(" Ouverture de l'invite de commandes ") print('---------------------------------------------') for i in range(len(liste_fichiersd)): print(liste_fichiersd[i]) for i in range(len(liste_fichiersd)):
file=liste_fichiersd[i] im = Image.open(file) print ("Nom du fichier : ",file,'\n'\ "Format :" ,im.format,'\n'\ "taille","%dx%d" % im.size,'\n'\ "Mode : ",im.mode) print('deux') for i in range(len(liste_fichiersd)): file11=liste_fichiersd[i] file1 = Image.open(file11).convert( "RGB" ) file1.save(str(i)+'.jpg', "JPEG") file2 = Image.open(str(i)+'.jpg').convert( "L" ) file2 = file2.convert( "L" ) file2.save(str(i+10)+'.bmp', "BMP") print ("Nom du fichier : "+str(i)+'.jpg','\n'\ "Format :" ,file1.format,'\n'\ "taille","%dx%d" % file1.size,'\n'\ "Mode : ",file1.mode) print ("Nom du fichier : "+str(i)+'2.bmp','\n'\ "Format :" ,file2.format,'\n'\ "taille","%dx%d" % file2.size,'\n'\ "Mode : ",file2.mode) print("Fichiers avant la conversion",liste_fichiersd) liste_fichiers =listdir(repertoire) for i in range(len(liste_fichiers)): print(liste_fichiers[i]) |
redimensionne puis découpe l’image Nom du fichier : 0.jpg Format : JPEG taille 1000x640 Mode : RGB Nom du fichier : 0.png Format : PNG taille 1000x640 Mode : RGBA Nom du fichier : 1.png Format : PNG taille 1000x640 Mode : RGBA Nom du fichier : 2.png Format : PNG taille 1000x640 Mode : RGBA Nom du fichier : 5.png Format : PNG taille 712x506 Mode : RGBA deux Nom du fichier : 0.jpg Format : None taille 1000x640 Mode : RGB Nom du fichier : 02.bmp Format : None taille 1000x640 Mode : L Nom du fichier : 1.jpg Format : None taille 1000x640 Mode : RGB Nom du fichier : 12.bmp Format : None taille 1000x640 Mode : L Nom du fichier : 2.jpg Format : None taille 1000x640 Mode : RGB Nom du fichier : 22.bmp Format : None taille 1000x640 Mode : L Nom du fichier : 3.jpg Format : None taille 1000x640 Mode : RGB Nom du fichier : 32.bmp |
.
DECOMPOSITION D’UNE IMAGE :
.
Décomposition d’une image :
rgba
rgba(0,0,0,0). La dernière valeur (l’alpha) indiquant le degré d’opacité entre 0 et 1.
.
programme | Résultat |
---|---|
#0808 decomposition.py from PIL import Image img = Image.open("2.png") # Récupération des différentes #composantes de l'image print( img.split() ) r,g,b,a=img.split() #enregistre l'image en rouge r.save('rouge.jpg') #enregistre l'image en vert g.save('vert.jpg') #enregistre l'image en bleu b.save('bleu.jpg') rouge=Image.open('rouge.jpg') rouge.show() vert=Image.open('vert.jpg') vert.show() bleu=Image.open('bleu.jpg') bleu.show() |
.
REDIMENSION ET DECOUPE :
.
Redimensionnement et découpe d’une image :
Fonction | Effet |
---|---|
im.resize(largeur,hauteur)
|
Redimensionne l’image en largeur et hauteur. |
im_out=Image.new(mode,nom)
|
img_out est une nouvelle image avec le mode et le nom donnés en paramètres. |
p=im.getpixel(x,y)
|
p est le pixel récupéré de la colonne x et de la ligne y. |
img_out.putpixel((x,y),p)
|
le pixel p va être installé sur la colonne x et la ligne y de l’image img_out |
programme | Résultat |
---|---|
#0808 redimensionne decoupe.py import os #bibliothèque pour le travail sur les dossier from PIL.Image import * from PIL import Image
def Tableau(ligne,colonne,liste): "fabrication d'un tableau lignes colonnes" tableau=ligne*[0] for ln in range(ligne):table[ln]=colonne*[0] for ln in range(0,ligne): for cn in range(0,colonne): tableau[ln][cn]=liste[clne*ln+cn] return tableau def redimensione(nom,nom_image,largeur,hauteur): "redimensionne une image" img_in=Image.open(nom_image) C,L=img_in.size img_out=Image.new("RGB",(largeur,hauteur)) img_out=img_in.resize((largeur,hauteur)) img_out.save(nom+'.png') return img_out
def decoupe(nom_image,largeur,hauteur): "decoupe une image en 20 images" img_in=Image.open(nom_image) C,L=img_in.size nbcol=int(C/largeur) nblig=int(L/hauteur) print(nbcol,C,largeur,nblig,L,largeur) col=C//nbcol colo=C//col lig=L//nblig lign=L//lig img_out=Image.new("RGB",(col,lig)) for i in range(int(nblig)): ligne=i ldebut=ligne*lig lfin=lig+ldebut for j in range(nbcol): colonne=j cdebut=colonne*col cfin=cdebut+col for ln in range(ldebut,lfin): for cn in range(cdebut,cfin): p=img_in.getpixel((cn,ln)) ccn=cn%col lln=ln-lig*ligne img_out.putpixel((ccn,lln),p) numero=i*nbcol+j+1 print(p) img_out.save(str(numero)+'s.png')
rep_cour=os.getcwd() #répertoire courant print ("répertoire courant :",rep_cour) os.chdir(rep_cour) #on s'y déplace ! print(os.getcwd()) #vérification print ("tout est en ordre !") nom_image=input("Donner le nom de l'image : ") img_in=Image.open(nom_image) print ("Nom de l'image :",nom_image) print("Format de l'image :",img_in.format) #tuple (Colonnes,Lignes) print ("Taille de l'image :",img_in.size) print ("Mode de l'image :",img_in.mode) #niveaux de gris nom=input("Donner le nom de la nouvelle image : ") largeur=int(input("Donner la nouvelle largeur : ")) hauteur=int(input("Donner la nouvelle hauteur : ")) decoupe(nom_image,largeur,hauteur) img_out=redimensione(nom,nom_image,largeur,hauteur) |
Image initiale Images redimensionnées. D:\python\08manipulerfichiers\redimensione tout est en ordre ! Donner le nom de l'image : grande.png Nom de l'image : grande.png Format de l'image : PNG Taille de l'image : (600, 300) Mode de l'image : RGBA Donner le nom de la nouvelle image : petite Donner la nouvelle largeur : 200 Donner la nouvelle hauteur : 100 3 600 200 3 300 200 (0, 0, 0, 255) (0, 0, 0, 255) (244, 244, 244, 255) (0, 0, 0, 255) (0, 0, 0, 255) (244, 244, 244, 255) (0, 0, 0, 255) (0, 0, 0, 255) (244, 244, 244, 255) |