Travailler avec des images en Python
PIL est la bibliothèque d'imagerie Python qui fournit à l'interpréteur Python des capacités d'édition d'images. Il a été développé par Fredrik Lundh et plusieurs autres contributeurs. Pillow est le fork convivial de PIL et une bibliothèque facile à utiliser développée par Alex Clark et d'autres contributeurs. Nous travaillerons avec Pillow.
Installation:
- Linux : Sur le terminal Linux, tapez ce qui suit :
pip install Pillow Installation de pip via le terminal :
sudo apt-get update
sudo apt-get install python-pip - Fenêtres : Télécharger le package Pillow approprié en fonction de votre version de python. Assurez-vous de télécharger en fonction de la version de Python dont vous disposez.
Nous allons travailler ici avec le module Image qui fournit une classe du même nom et fournit de nombreuses fonctions pour travailler sur nos images. Pour importer le module Image, notre code doit commencer par la ligne suivante :
from PIL import ImageOpérations avec des images :
- Ouvrez une image particulière à partir d'un chemin : Python
#img = Image.open(path) # On successful execution of this statement # an object of Image type is returned and stored in img variable) try : img = Image . open ( path ) except IOError : pass # Use the above statement within try block as it can # raise an IOError if file cannot be found # or image cannot be opened.
- Récupérer la taille de l'image : Les instances de la classe Image créées ont de nombreux attributs, l'un de ses attributs utiles étant la taille. Python
Certains autres attributs sont : Image.width Image.height Image.format Image.info etc.from PIL import Image filename = 'image.webp' with Image . open ( filename ) as image : width height = image . size #Image.size gives a 2-tuple and the width height can be obtained
- Enregistrer les modifications dans l'image : Pour enregistrer les modifications que vous avez apportées au fichier image, nous devons indiquer le chemin ainsi que le format de l'image. Python
img . save ( path format ) # format is optional if no format is specified #it is determined from the filename extension
- Rotation d'une image : La rotation de l'image a besoin de l'angle comme paramètre pour faire pivoter l'image. Python
from PIL import Image def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) #Angle given img = img . rotate ( 180 ) #Saved in the same relative location img . save ( 'rotated_picture.webp' ) except IOError : pass if __name__ == '__main__' : main ()
Remarque : Il existe un indicateur d'expansion facultatif disponible comme argument de la méthode de rotation qui, s'il est défini sur true, agrandit l'image de sortie pour la rendre suffisamment grande pour contenir l'image entièrement pivotée. Comme le montre l'extrait de code ci-dessus, j'ai utilisé un chemin relatif où mon image se trouve dans le même répertoire que mon fichier de code python, un chemin absolu peut également être utilisé. - Recadrage d'une image : Image.crop(box) prend une coordonnée de pixel à 4 tuples (gauche en haut à droite en bas) et renvoie une région rectangulaire de l'image utilisée. Python
from PIL import Image def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) width height = img . size area = ( 0 0 width / 2 height / 2 ) img = img . crop ( area ) #Saved in the same relative location img . save ( 'cropped_picture.webp' ) except IOError : pass if __name__ == '__main__' : main ()
- Redimensionner une image : Image.resize(size)- Ici, la taille est fournie sous la forme d'une largeur et d'une hauteur de 2 tuples. Python
from PIL import Image def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) width height = img . size img = img . resize (( width / 2 height / 2 )) #Saved in the same relative location img . save ( 'resized_picture.webp' ) except IOError : pass if __name__ == '__main__' : main ()
- Coller une image sur une autre image : Le deuxième argument peut être un 2-tuple (spécifiant le coin supérieur gauche) ou un 4-tuple (gauche supérieur droit inférieur) - dans ce cas, la taille de l'image collée doit correspondre à la taille de cette région de boîte ou Aucune, ce qui est équivalent à (0 0). Python
from PIL import Image def main (): try : #Relative Path #Image on which we want to paste img = Image . open ( 'picture.webp' ) #Relative Path #Image which we want to paste img2 = Image . open ( 'picture2.webp' ) img . paste ( img2 ( 50 50 )) #Saved in the same relative location img . save ( 'pasted_picture.webp' ) except IOError : pass if __name__ == '__main__' : main () ##An additional argument for an optional image mask image is also available.
- Obtenir un histogramme d'une image : Cela renverra un histogramme de l'image sous forme d'une liste de pixels, un pour chaque pixel de l'image. (Un histogramme d'une image est une représentation graphique de la distribution des tons dans une image numérique. Il contient toutes les valeurs de luminosité contenues dans une image. Il trace le nombre de pixels pour chaque valeur de luminosité. Il aide à effectuer les réglages d'exposition.) à partir de l'image d'importation PIL Python
def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) #Getting histogram of image print img . histogram () except IOError : pass if __name__ == '__main__' : main ()
- Transposer une image : Cette fonctionnalité nous donne l'image miroir d'une image Python
from PIL import Image def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) #transposing image transposed_img = img . transpose ( Image . FLIP_LEFT_RIGHT ) #Save transposed image transposed_img . save ( 'transposed.webp' ) except IOError : pass if __name__ == '__main__' : main ()
- Divisez une image en bandes individuelles : La division d'une image en mode RVB crée trois nouvelles images contenant chacune une copie des bandes individuelles d'origine. Python
from PIL import Image def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) #splitting the image print img . split () except IOError : pass if __name__ == '__main__' : main ()
- tobitmap : Conversion d'une image en bitmap X11 (un format d'image binaire en texte brut). Il renvoie une chaîne contenant un bitmap X11. Il ne peut être utilisé que pour les images en mode 1, c'est-à-dire les images en noir et blanc de 1 bit de pixel. à partir de l'image d'importation PIL Python
def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) print img . mode #converting image to bitmap print img . tobitmap () print type ( img . tobitmap ()) except IOError : pass if __name__ == '__main__' : main ()
- Création d'une vignette : Cette méthode crée une vignette de l'image ouverte. Il ne renvoie pas de nouvel objet image, il apporte lui-même une modification sur place à l'objet image actuellement ouvert. Si vous ne souhaitez pas modifier l'objet image d'origine, créez une copie puis appliquez cette méthode. Cette méthode évalue également la pertinence de maintenir le rapport hauteur/largeur de l'image en fonction de la taille transmise. à partir de l'image d'importation PIL Python
def main (): try : #Relative Path img = Image . open ( 'picture.webp' ) #In-place modification img . thumbnail (( 200 200 )) img . save ( 'thumb.webp' ) except IOError : pass if __name__ == '__main__' : main ()