Opérations de base de Pillow Image
Après avoir installé la bibliothèque Pillow, nous devons importer les modules nécessaires :
# 导入模块 from PIL import Image, ImageFilter, ImageEnhance, ImageDraw, ImageFont import os
Image de test (à télécharger localement pour tester) :
Exemple
Voici un exemple complet illustrant les opérations suivantes :
- Ouvrir et afficher les informations de base de l'image
- Format, taille, mode, etc.
- Redimensionner l'image
- Redimensionner l'image aux dimensions spécifiées
- Recadrer l'image
- Extraire une région spécifique de l'image d'origine
- Faire pivoter l'image
- Pivoter de 45 degrés et conserver toute l'image
- Retourner l'image
- Retournement horizontal et vertical
- Convertir le mode de couleur
- Convertir une image en couleur en niveaux de gris
- Appliquer des filtres
- Effets tels que flou, renforcement des contours, contour, etc.
- Ajuster les propriétés de l'image
- Réglage de la luminosité, du contraste et de la netteté
- Ajouter du texte
- Dessiner du texte sur l'image
- Fusionner des images
- Assemblage simple d'images
- Enregistrer dans différents formats et qualités
- PNG, BMP et JPEG de différentes qualités
Exemple
Tutoriel sur les opérations de base sur les images avec Python Pillow
Image de test utilisée : tiger.jpeg
"""
from PIL import Image, ImageFilter, ImageEnhance, ImageDraw, ImageFont
import os
def main():
# S'assurer qu'il existe un dossier de sortie dans notre répertoire de travail
output_dir = "output"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 1. Ouvrir l'image
print("1. Ouvrir l'image")
try:
img = Image.open("tiger.jpeg")
print(f"Image ouverte avec succès - Format : {img.format}, Taille : {img.size}, Mode : {img.mode}")
except Exception as e:
print(f"Impossible d'ouvrir l'image : {e}")
return
# 2. Afficher les informations de base sur l'image
print("\n2. Informations de base sur l'image")
print(f"Format de l'image : {img.format}")
print(f"Taille de l'image (largeur x hauteur) : {img.size}")
print(f"Mode de l'image : {img.mode}")
# 3. Redimensionner l'image
print("\n3. Redimensionner l'image")
resized_img = img.resize((400, 300))
resized_img.save(f"{output_dir}/resized_tiger.jpg")
print("Image redimensionnée enregistrée")
# 4. Recadrer l'image
print("\n4. Recadrer l'image")
# Zone de recadrage (gauche, haut, droite, bas)
width, height = img.size
crop_area = (width//4, height//4, 3*width//4, 3*height//4) # Recadrer la zone centrale
cropped_img = img.crop(crop_area)
cropped_img.save(f"{output_dir}/cropped_tiger.jpg")
print(f"Zone d'image recadrée {crop_area} et enregistrée")
# 5. Rotation de l'image
print("\n5. Rotation de l'image")
rotated_img = img.rotate(45, expand=True) # Rotation de 45 degrés, expand=True conserve toute l'image
rotated_img.save(f"{output_dir}/rotated_tiger.jpg")
print("Image pivotée enregistrée")
# 6. Retourner l'image
print("\n6. Retourner l'image")
# Retournement horizontal
h_flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
h_flipped.save(f"{output_dir}/horizontal_flip_tiger.jpg")
# Retournement vertical
v_flipped = img.transpose(Image.FLIP_TOP_BOTTOM)
v_flipped.save(f"{output_dir}/vertical_flip_tiger.jpg")
print("Images retournées horizontalement et verticalement enregistrées")
# 7. Convertir le mode de couleur
print("\n7. Convertir le mode de couleur")
grayscale_img = img.convert('L') # Convertir en niveaux de gris
grayscale_img.save(f"{output_dir}/grayscale_tiger.jpg")
print("Image en niveaux de gris enregistrée")
# 8. Appliquer les filtres
print("\n8. Appliquer les filtres")
# Filtre de flou
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.save(f"{output_dir}/blurred_tiger.jpg")
# Renforcement des contours
edge_img = img.filter(ImageFilter.EDGE_ENHANCE)
edge_img.save(f"{output_dir}/edge_enhanced_tiger.jpg")
# Filtre de contours
contour_img = img.filter(ImageFilter.CONTOUR)
contour_img.save(f"{output_dir}/contour_tiger.jpg")
print("Images enregistrées avec différents filtres appliqués")
# 9. Ajuster la luminosité, le contraste et la netteté
print("\n9. Ajuster les propriétés de l'image")
# Augmenter la luminosité
brightness = ImageEnhance.Brightness(img)
bright_img = brightness.enhance(1.5) # Luminosité augmentée de 50%
bright_img.save(f"{output_dir}/brighter_tiger.jpg")
# Augmenter le contraste
contrast = ImageEnhance.Contrast(img)
contrast_img = contrast.enhance(1.5) # Contraste augmenté de 50%
contrast_img.save(f"{output_dir}/contrast_tiger.jpg")
# Augmenter la netteté
sharpness = ImageEnhance.Sharpness(img)
sharp_img = sharpness.enhance(2.0) # Netteté augmentée de 100%
sharp_img.save(f"{output_dir}/sharper_tiger.jpg")
print("Image enregistrée après ajustements de luminosité, de contraste et de netteté")
# 10. Ajouter du texte
print("\n10. Ajouter du texte")
# Créer une copie pour le dessin
text_img = img.copy()
draw = ImageDraw.Draw(text_img)
# Essayer d'utiliser une police système, revenir à la police par défaut en cas d'échec
try:
# Différents systèmes d'exploitation peuvent nécessiter différents chemins de police
# Exemple de chemin de police Windows
font = ImageFont.truetype("arial.ttf", 36)
except IOError:
font = ImageFont.load_default()
# Ajouter du texte à l'image
draw.text((10, 10), "Tiger", fill=(255, 255, 255), font=font)
text_img.save(f"{output_dir}/text_tiger.jpg")
print("Image enregistrée avec le texte ajouté")
# 11. Fusionner les images (assemblage simple)
print("\n11. Fusionner les images")
# Créer une nouvelle image avec deux fois la largeur de l'original et la même hauteur
merged_img = Image.new('RGB', (width*2, height))
# Placer l'image originale à gauche
merged_img.paste(img, (0, 0))
# Placer l'image en niveaux de gris à droite
merged_img.paste(grayscale_img.convert('RGB'), (width, 0))
merged_img.save(f"{output_dir}/merged_tiger.jpg")
print("Image fusionnée enregistrée")
# 12. Enregistrer dans différents formats
print("\n12. Enregistrer dans différents formats")
img.save(f"{output_dir}/tiger.png") # Format PNG
img.save(f"{output_dir}/tiger.bmp") # Format BMP
# Enregistrer au format JPEG avec réglage de qualité
img.save(f"{output_dir}/tiger_high_quality.jpg", quality=95) # Haute qualité
img.save(f"{output_dir}/tiger_low_quality.jpg", quality=10) # Basse qualité
print("Images enregistrées dans différents formats et qualités")
print("\nToutes les opérations sont terminées ! Les images traitées sont enregistrées dans le dossier 'output'.")
if __name__ == "__main__":
main()
Le code utilise une approche structurée, avec des commentaires clairs pour chaque opération. Toutes les images traitées sont enregistrées dans le répertoireoutputpour faciliter la visualisation et la comparaison des résultats.
Utilisation :
- Assurez-vous que l'image tiger.jpeg se trouve dans le même répertoire que le code
- Exécutez le code, et diverses images traitées seront générées dans le dossier de sortie
- Visualisez les différents effets de traitement en fonction des informations de sortie
Si le code ci-dessus s'exécute avec succès, la sortie du terminal sera :

Description de l'opération
1. Ouvrir l'image et obtenir des informations de base
Exemple
img = Image.open("tiger.jpeg")
# Obtenir et afficher les informations de l'image
print(f"Format de l'image : {img.format}") # par exemple, JPEG, PNG, etc.
print(f"Taille de l'image (largeur x hauteur) : {img.size}") # e.g., (800, 600)
print(f"Mode de l'image : {img.mode}") # par exemple, RGB, RGBA, L (niveaux de gris), etc.
Explication détaillée:
Image.open()La fonction est utilisée pour ouvrir un fichier image, et le paramètre est le chemin d'accès au fichier image.img.formatAfficher le format de l'image (par ex., JPEG, PNG, GIF, etc.)img.sizeRenvoie un tuple contenant la largeur et la hauteur, par ex., (800, 600)img.modeAfficher le mode de couleur de l'image :RGB: Image en couleurRGBA: Image en couleur avec canal de transparenceL: Image en niveaux de gris1: Image binaire (noir et blanc)
2. Redimensionner l'image
Exemple
resized_img = img.resize((400, 300))
# Enregistrer l'image redimensionnée
resized_img.save("output/resized_tiger.jpg")
Explication détaillée:
resize()La méthode est utilisée pour modifier la taille de l'image, et le paramètre est un tuple contenant la nouvelle largeur et la nouvelle hauteur.- Cette méthode ne modifie pas l'image d'origine, mais retourne un nouvel objet image.
- Par défaut, l'interpolation du plus proche voisin est utilisée. Pour un redimensionnement de meilleure qualité, vous pouvez ajouter des paramètres :
resized_img = img.resize((400, 300), Image.LANCZOS) save()La méthode enregistre l'image traitée dans le chemin spécifié.
3. Recadrer l'image
Exemple
width, height = img.size
# Définir la zone de recadrage (gauche, haut, droite, bas)
crop_area = (width//4, height//4, 3*width//4, 3*height//4) # Recadrer la zone centrale
# Effectuer le recadrage
cropped_img = img.crop(crop_area)
# Enregistrer l'image recadrée
cropped_img.save("output/cropped_tiger.jpg")
Explication détaillée:
crop()La méthode est utilisée pour extraire une région rectangulaire de l'image.- La zone de recadrage est définie par un tuple
(left, upper, right, lower)Définition :left: coordonnée x de la limite gaucheupper: coordonnée y de la limite supérieureright: coordonnée x de la limite droitelower: coordonnée y de la limite inférieure
- Dans l'exemple, nous avons recadré la partie centrale de l'image (la région du 1/4 à 3/4)
width//4in//est une division entière, garantissant que le résultat est un entier
4. Faire pivoter l'image
Exemple
rotated_img = img.rotate(45, expand=True)
# Enregistrer l'image pivotée
rotated_img.save("output/rotated_tiger.jpg")
Explication détaillée:
rotate()La méthode est utilisée pour faire pivoter l'image ; le premier paramètre est l'angle de rotation (dans le sens antihoraire, en degrés)expand=TrueLe paramètre agrandit la taille de l'image de sortie pour contenir l'intégralité de l'image pivotée- Si ce n'est pas défini
expand=True, l'image pivotée sera recadrée pour correspondre à la taille d'origine - Par défaut, le centre de rotation est le point central de l'image
5. Retourner l'image
Exemple
h_flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
h_flipped.save("output/horizontal_flip_tiger.jpg")
# Retournement vertical (miroir haut-bas)
v_flipped = img.transpose(Image.FLIP_TOP_BOTTOM)
v_flipped.save("output/vertical_flip_tiger.jpg")
Explication détaillée:
transpose()La méthode est utilisée pour les opérations de retournement et de transposition d'imageImage.FLIP_LEFT_RIGHTLa constante représente un retournement horizontal (miroir gauche-droite)Image.FLIP_TOP_BOTTOMLa constante représente un retournement vertical (miroir haut-bas)- En plus du retournement, d'autres constantes telles que peuvent également être utilisées
Image.ROTATE_90,Image.ROTATE_180,Image.ROTATE_270pour effectuer une rotation
6. Convertir le mode de couleur
Exemple
grayscale_img = img.convert('L')
# Enregistrer l'image en niveaux de gris
grayscale_img.save("output/grayscale_tiger.jpg")
Explication détaillée:
convert()La méthode est utilisée pour changer le mode de l'image (espace colorimétrique)- Le paramètre
'L'indique la conversion en une image en niveaux de gris (luminance) - Les autres modes couramment utilisés incluent :
'RGB': couleur à trois canaux'RGBA': couleur à quatre canaux (avec transparence)'CMYK': mode d'impression quadrichromique CMJN'1': image binaire (noir et blanc pur)
- La conversion des modes peut réduire la taille du fichier ou préparer à un traitement spécifique
7. Appliquer des filtres d'image
Exemple
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.save("output/blurred_tiger.jpg")
# Appliquer un filtre d'accentuation des contours
edge_img = img.filter(ImageFilter.EDGE_ENHANCE)
edge_img.save("output/edge_enhanced_tiger.jpg")
# Appliquer un filtre de contours
contour_img = img.filter(ImageFilter.CONTOUR)
contour_img.save("output/contour_tiger.jpg")
Explication détaillée:
filter()La méthode est utilisée pour appliquer divers effets de filtre prédéfinis à une imageImageFilter.BLURElle floute l'image, comme un effet de mise au point douceImageFilter.EDGE_ENHANCERenforce les bords de l'image, rendant les contours plus visiblesImageFilter.CONTOURDétecte les lignes de contour de l'image, produisant un effet de croquis- D'autres filtres couramment utilisés incluent :
ImageFilter.SHARPEN: Accentuer l'imageImageFilter.EMBOSS: Effet de reliefImageFilter.FIND_EDGES: Trouver les bordsImageFilter.SMOOTH: Lisser l'image
- Vous pouvez également créer des filtres personnalisés, tels que le flou gaussien :
img.filter(ImageFilter.GaussianBlur(radius=2))
8. Ajuster les propriétés de l'image (luminosité, contraste, netteté)
Exemple
brightness = ImageEnhance.Brightness(img)
bright_img = brightness.enhance(1.5)
bright_img.save("output/brighter_tiger.jpg")
# Augmenter le contraste (1.5 signifie que le contraste est augmenté de 50%)
contrast = ImageEnhance.Contrast(img)
contrast_img = contrast.enhance(1.5)
contrast_img.save("output/contrast_tiger.jpg")
# Augmenter la netteté (2.0 signifie que la netteté est augmentée de 100%)
sharpness = ImageEnhance.Sharpness(img)
sharp_img = sharpness.enhance(2.0)
sharp_img.save("output/sharper_tiger.jpg")
Explication détaillée:
ImageEnhanceLe module fournit plusieurs classes d'amélioration pour ajuster différentes propriétés d'image- Chaque objet d'amélioration doit d'abord être initialisé avec un objet image
enhance()La méthode accepte un paramètre indiquant le degré d'amélioration :- Une valeur de 1.0 signifie que l'image d'origine reste inchangée
- Une valeur supérieure à 1.0 indique un effet d'amélioration (par ex., 1.5 signifie une augmentation de 50%)
- Une valeur inférieure à 1.0 indique un effet de réduction (par ex., 0.5 signifie une diminution de 50%)
- En plus des trois améliorateurs présentés ci-dessus, il y a aussi
ImageEnhance.Colorpour ajuster la saturation des couleurs
9. Ajouter du texte à l'image
Exemple
text_img = img.copy()
# Créer un objet de dessin
draw = ImageDraw.Draw(text_img)
# Essayer de charger une police (utiliser la police par défaut si indisponible)
try:
# Charger une police système de taille 36 pixels
font = ImageFont.truetype("arial.ttf", 36)
except IOError:
# Si la police spécifiée est introuvable, utiliser la police par défaut
font = ImageFont.load_default()
# Ajouter du texte à l'image
draw.text((10, 10), "Tiger", fill=(255, 255, 255), font=font)
# Enregistrer l'image avec le texte ajouté
text_img.save("output/text_tiger.jpg")
Explication détaillée:
copy()La méthode crée une copie de l'image originale afin d'éviter de modifier l'image originaleImageDraw.Draw()Crée un objet de dessin pour dessiner sur l'imageImageFont.truetype()Utilisé pour charger des polices TrueType :- Le premier paramètre est le chemin du fichier de police (par exemple, "arial.ttf")
- Le deuxième paramètre est la taille de la police (en pixels)
draw.text()Utilisé pour dessiner du texte sur l'image :- Le premier paramètre
(10, 10)correspond aux coordonnées de position du texte (coin supérieur gauche) - Le deuxième paramètre est le contenu de texte à dessiner
fillLe paramètre spécifie la couleur du texte, ici elle est blanche(255, 255, 255)fontLe paramètre spécifie la police à utiliser
- Le premier paramètre
- Utiliser
try-exceptbloc pour gérer d'éventuels échecs de chargement de police
10. Fusionner des images (assemblage simple)
Exemple
width, height = img.size
# Créer une nouvelle image vierge dont la largeur est le double de l'originale
merged_img = Image.new('RGB', (width*2, height))
# Coller l'image originale à gauche
merged_img.paste(img, (0, 0))
# Convertir l'image en niveaux de gris en RGB et la coller à droite
merged_img.paste(grayscale_img.convert('RGB'), (width, 0))
# Enregistrer l'image fusionnée
merged_img.save("output/merged_tiger.jpg")
Explication détaillée:
Image.new()Créer une nouvelle image vierge :- Le premier paramètre est le mode de couleur, le voici
'RGB' - Le deuxième paramètre est la taille de l'image, ici c'est le double de la largeur et de la hauteur d'origine
- Le premier paramètre est le mode de couleur, le voici
paste()La méthode colle une image sur une autre :- Le premier paramètre est l'image à coller
- Le deuxième paramètre correspond aux coordonnées de la position de collage (coin supérieur gauche)
convert('RGB')Convertir l'image en niveaux de gris en mode RGB car seules les images de même mode peuvent être collées ensemble- Cette méthode peut être utilisée pour créer des collages, des comparaisons côte à côte ou des collections de photos
11. Enregistrer dans différents formats et qualités
Exemple
img.save("output/tiger.png")
# Enregistrer au format BMP (sans compression)
img.save("output/tiger.bmp")
# Enregistrer en JPEG de haute qualité (qualité 95%)
img.save("output/tiger_high_quality.jpg", quality=95)
# Enregistrer en JPEG de basse qualité (qualité 10%)
img.save("output/tiger_low_quality.jpg", quality=10)
Explication détaillée:
save()La méthode détermine automatiquement le format d'enregistrement en fonction de l'extension du fichier- Caractéristiques des différents formats :
PNG: Compression sans perte, prend en charge la transparence, adapté aux icônes, captures d'écran, etc.JPEG: Compression avec perte, adaptée aux photos, ne prend pas en charge la transparenceBMP: Aucune compression, taille de fichier plus grande, mais conserve toutes les informationsGIF: Prend en charge l’animation, jusqu’à 256 couleurs
- Pour le format JPEG, vous pouvez utiliser le
qualityparamètre pour contrôler la qualité de compression :- La valeur va de 1 (qualité la plus faible, fichier le plus petit) à 95 (meilleure qualité, fichier plus volumineux)
- La valeur par défaut est généralement 75
- Différents réglages de qualité peuvent aider à équilibrer la qualité d’image et la taille du fichier
12. Créer le répertoire de sortie
Exemple
output_dir = "output"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
Explication détaillée:
os.path.exists()Vérifier si le répertoire spécifié existeos.makedirs()Créer le répertoire s’il n’existe pas- Ce code garantit que nous avons un emplacement pour enregistrer les images traitées
- Placer toutes les images générées dans un répertoire séparé permet de mieux organiser le projet
