Module PIL

.

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

_images/image190.png

.

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

_images/image192.png

.

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

_images/pil03.png

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()

_images/image194.png _images/image198.png

.

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.

_images/pil04.png

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)