1. Chargement et sauvegarde d'images
Pour charger des images dans Pillow, on utilise la classe Image
.
Une fois chargée, l'image peut être transformée et sauvegardée dans différents
formats. Regardons les opérations principales pour charger et sauvegarder des images.
Chargement d'image
Pour charger une image, utilise la méthode Image.open()
.
Elle permet d'ouvrir une image de tout format supporté.
from PIL import Image
# Ouverture d'une image
image = Image.open("example.jpg")
# Affichage des informations sur le fichier
print(image.format) # Format de l'image, par exemple, JPEG ou PNG
print(image.size) # Dimensions de l'image (largeur, hauteur)
print(image.mode) # Mode couleur, par exemple, RGB ou Niveaux de gris
Ce code charge l'image example.jpg
et affiche ses
principales caractéristiques : format, dimensions et mode couleur. Si l'image ne
se trouve pas dans le même dossier, spécifie le chemin complet vers le fichier.
Sauvegarde d'image
Après avoir chargé et modifié une image, tu peux la sauvegarder dans tout
autre format supporté, simplement en précisant l'extension souhaitée dans le nom du fichier. La méthode
save()
permet de définir le nom et le format du fichier de sortie.
# Sauvegarde de l'image dans un autre format
image.save("example.png") # Sauvegarde l'image au format PNG
Tu peux également ajuster la qualité de l'image sauvegardée afin de réduire la taille du fichier, ce qui est particulièrement utile pour les images au format JPEG.
# Sauvegarde avec changement de qualité
image.save("compressed_example.jpg", quality=85) # La valeur quality varie de 1 à 95
2. Redimensionnement des images
Le redimensionnement est l'une des tâches les plus courantes lors du travail avec des images. Pillow offre plusieurs façons de redimensionner, y compris le changement précis des paramètres de largeur et de hauteur, le redimensionnement proportionnel et la création de miniatures.
Redimensionnement avec la méthode resize()
La méthode resize()
permet de spécifier les dimensions exactes de l'image (largeur et hauteur), mais l'image peut être déformée si les nouvelles dimensions ne conservent pas les proportions d'origine.
# Définir une nouvelle taille
new_size = (800, 600)
resized_image = image.resize(new_size)
# Sauvegarde de l'image redimensionnée
resized_image.save("resized_example.jpg")
Dans cet exemple, l'image est redimensionnée à 800x600 pixels et sauvegardée dans un nouveau fichier. Si l'image originale a d'autres proportions, elle sera étirée ou compressée pour correspondre aux nouvelles dimensions.
Redimensionnement proportionnel avec thumbnail()
Pour redimensionner une image tout en conservant ses proportions, utilise la méthode
thumbnail()
. Cette méthode réduit automatiquement l'image pour qu'elle corresponde
aux dimensions données tout en conservant les proportions d'origine. Cela est particulièrement utile
pour créer des miniatures.
# Création d'une miniature avec des dimensions maximales de 400x400 pixels
image.thumbnail((400, 400))
# Sauvegarde de la miniature
image.save("thumbnail_example.jpg")
La méthode thumbnail()
modifie l'image "en place", ce qui
signifie que les modifications se produisent dans l'objet image
d'origine. Après l'appel de thumbnail()
, Pillow réduira l'image pour
que ses dimensions ne dépassent pas 400x400 pixels, tout en conservant les proportions.
Redimensionnement avec rognage via ImageOps.fit()
Parfois, il est nécessaire de redimensionner une image pour qu'elle corresponde
exactement aux dimensions spécifiées, tout en conservant les proportions en coupant les parties inutiles. Dans ce cas, tu peux utiliser la méthode ImageOps.fit()
.
from PIL import ImageOps
# Définir une nouvelle taille
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)
# Sauvegarde de l'image rognée
fitted_image.save("fitted_example.jpg")
La méthode ImageOps.fit()
rogne automatiquement l'image pour qu'elle corresponde
aux dimensions spécifiées sans distorsion. Par exemple, si l'image d'origine est rectangulaire,
la méthode coupera les bords pour qu'elle devienne carrée et corresponde à la taille
400x400 pixels.
3. Exemple de code complet
Voici un exemple de code qui combine toutes les méthodes discutées — de chargement au redimensionnement et à la sauvegarde d'images.
from PIL import Image, ImageOps
# Ouverture de l'image
image = Image.open("example.jpg")
# Redimensionnement sans préserver les proportions
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")
# Réduction proportionnelle de l'image
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")
# Redimensionnement avec rognage pour correspondre à une taille spécifiée
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")
Explications des méthodes de redimensionnement
-
resize()
: permet de définir des dimensions arbitraires, mais peut entraîner une déformation de l'image si les nouvelles dimensions ne respectent pas les proportions de l'original. -
thumbnail()
: redimensionne l'image, tout en préservant les proportions. Utile pour créer des miniatures et réduire des images grandes. -
ImageOps.fit()
: redimensionne l'image aux dimensions spécifiées avec rognage des bords. Utilisé pour s'assurer que l'image correspond exactement aux dimensions spécifiées sans déformation.
4. Conseils :
Usage pratique du redimensionnement des images
- Optimisation des images pour les sites web : Les grandes images peuvent ralentir le chargement d'une page, il est donc important de les optimiser en réduisant leur taille sans perte de qualité.
-
Création de miniatures pour les galeries : Utiliser
thumbnail()
permet de créer rapidement des miniatures d'images à afficher en aperçu. -
Adaptation des images à des dimensions spécifiques : Lorsque tu dois
ajuster une image à des dimensions fixes, par exemple pour un avatar
ou un profil, la méthode
ImageOps.fit()
permet de rogner et de redimensionner l'image pour répondre à ces exigences.
Conseils sur le choix des méthodes
Utilise resize()
lorsque tu veux définir précisément la largeur et
la hauteur d'une image, et que ça ne te dérange pas que les proportions changent.
Adopte thumbnail()
pour créer des miniatures ou lorsque tu veux
réduire une image en conservant ses proportions.
Emploie ImageOps.fit()
lorsque tu as besoin d'une image
aux dimensions spécifiques, mais sans distorsion des proportions. Cette méthode rogne les
parties inutiles, ce qui est pratique pour adapter l'image à un cadre donné.
GO TO FULL VERSION