1. Identification du format d'image
Formats d'images pris en charge
Pillow prend en charge de nombreux formats d'images, tels que :
- JPEG (JPG) : L'un des formats les plus utilisés pour les photos. Compresse l'image avec perte de qualité, mais réduit considérablement la taille du fichier. Ne prend pas en charge la transparence.
- PNG : Format sans perte qui prend en charge la transparence (canal alpha). Idéal pour les logos, icônes et images nécessitant une netteté.
- BMP : Format de haute qualité sans compression, mais avec une grande taille de fichier. Prend en charge la transparence.
- TIFF : Populaire pour le stockage d'images sans perte. Souvent utilisé dans l'imprimerie.
- WEBP : Format moderne avec une grande capacité de compression et supportant la transparence. Idéal pour les images web, car il offre une petite taille de fichier avec une bonne qualité.
Chargement d'une image pour la conversion
Avant de convertir une image, elle doit être chargée à l'aide de la méthode Image.open()
.
from PIL import Image
# Ouverture de l'image
image = Image.open("example.jpg")
print(image.format) # Vérifier le format initial de l'image
2. Conversion d'une image en un autre format
La méthode save()
permet de sauvegarder les images dans différents formats, simplement en changeant l'extension dans le nom de fichier ou en spécifiant explicitement le format.
Conversion de JPEG en PNG
Pour convertir une image de JPEG en PNG, il suffit de spécifier une nouvelle extension lors de la sauvegarde du fichier :
# Sauvegarde de l'image au format PNG
image.save("example_converted.png")
Ce code convertit une image du format JPEG au format PNG, en la sauvegardant avec le nom indiqué. PNG est parfait pour les images sans perte et prend également en charge les zones transparentes.
Conversion de PNG en JPEG
La conversion d'une image de PNG en JPEG est aussi possible, mais il est important de noter que JPEG ne prend pas en charge la transparence. Lors de la conversion, les zones transparentes seront remplies de blanc.
# Conversion de PNG en JPEG (la transparence sera remplacée par du blanc)
image = image.convert("RGB") # Passage en mode RGB nécessaire pour JPEG
image.save("example_converted.jpg", "JPEG")
La méthode convert("RGB")
est utilisée pour convertir l'image en mode RGB, car JPEG ne prend pas en charge les zones transparentes. Ceci est nécessaire pour sauvegarder le fichier au format JPEG.
3. Gestion de la qualité de l'image
Pour optimiser les images, Pillow propose les paramètres quality
et optimize
, qui permettent de contrôler la qualité et la taille du fichier. Ces paramètres sont particulièrement utiles pour JPEG et PNG.
Optimisation et gestion de la qualité JPEG
Lors de la sauvegarde d'une image au format JPEG, le paramètre quality
ajuste le niveau de compression. Plus la valeur de qualité est élevée, plus la taille du fichier est grande et plus la qualité de l'image est bonne. La valeur de quality
varie de 1 à 95 (par défaut 75).
# Sauvegarde d'une image JPEG avec une qualité réduite
image.save("example_compressed.jpg", "JPEG", quality=85)
Ce code sauvegarde une image avec une qualité de 85, ce qui permet généralement de conserver une bonne qualité tout en réduisant la taille du fichier. Si une qualité inférieure est nécessaire, par exemple pour créer des miniatures, on peut indiquer quality = 50
.
Optimisation PNG
Pour PNG, le paramètre optimize = True
effectue une compression sans perte en supprimant les données redondantes. Cela est particulièrement utile pour publier des images sur Internet.
# Sauvegarde d'un PNG optimisé
image.save("example_optimized.png", "PNG", optimize=True)
L'optimisation PNG aide à réduire la taille du fichier sans perte de qualité, ce qui est particulièrement important pour les logos et icônes, où chaque kilooctet peut compter.
Comparaison de la qualité JPEG avec différents niveaux de compression
Voyons comment le changement du paramètre quality
influence la taille du fichier et la qualité de l'image.
# Sauvegarde d'une image JPEG avec différentes qualités
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
Dans cet exemple, nous sauvegardons la même image avec trois niveaux de qualité : 95, 75 et 50. L'image avec une qualité de 95 sera pratiquement indiscernable de l'original, mais prendra plus d'espace, tandis que la qualité 50 entraînera une compression significative et une éventuelle perte de détails visible.
4. Utilisation du format WebP
Le format WebP est un format moderne qui prend en charge la compression avec et sans perte, ainsi que la transparence. Il est largement utilisé sur Internet en raison de son haut niveau de compression.
Conversion d'une image au format WebP
# Conversion d'une image en WebP
image.save("example.webp", "WEBP", quality=80)
Dans cet exemple, nous sauvegardons une image au format WebP avec une qualité de 80. WebP permet d'obtenir une taille de fichier nettement inférieure par rapport à JPEG ou PNG tout en conservant une qualité similaire.
Exemple de conversion complète avec optimisation
Mettons maintenant en pratique toutes les méthodes étudiées et écrivons un script pour convertir une image en plusieurs formats avec optimisation.
from PIL import Image
# Ouverture de l'image
image = Image.open("example.jpg")
# Conversion en PNG avec optimisation
image.save("converted_optimized.png", "PNG", optimize=True)
# Conversion en JPEG avec qualité réduite
image_rgb = image.convert("RGB") # Passage en mode RGB pour JPEG
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# Conversion en WebP avec optimisation de la qualité
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
Dans cet exemple :
- Nous convertissons l'image en PNG avec optimisation, ce qui aide à réduire la taille du fichier sans perte.
- Nous sauvegardons l'image au format JPEG avec une qualité de 85, ce qui garantit une bonne qualité et une petite taille de fichier.
- Nous convertissons l'image au format WebP, idéal pour la publication sur Internet, tout en conservant une haute qualité avec une petite taille de fichier.
GO TO FULL VERSION