Comment compresser des images / photos sans utiliser de logiciel inconnu ? Ci-dessous, vous trouverez un script pour compresser des images facilement en fonction de la taille et du niveau de compression voulu.

Dans cet article, nous allons voir comment créer un script Python pour compresser des images sans perte de qualité. Nous allons utiliser la bibliothèque Pillow pour manipuler les images. Le script permettra de compresser toutes les images d’un dossier donné et de les enregistrer dans un dossier de sortie spécifié. Il permet également de choisir le niveau de compression et de redimensionner les images à une taille spécifiée en pourcentage.

Les élément demandés au script Python

Le script créé est un outil intéressant pour les personnes travaillant avec des images et souhaitant les compresser de manière rapide les compresser tout en maintenant une qualité d’image que je trouve élevée. Il fonctionne en redimensionnant l’image et en la comprimant en utilisant une bibliothèque Python appelée PIL.

Le script commence par importer la bibliothèque PIL ainsi que la bibliothèque os, qui est utilisée pour travailler avec des fichiers et des dossiers. La fonction compress_image prend plusieurs arguments : le chemin d’accès à l’image d’entrée, le chemin d’accès à l’image de sortie, la taille en % selon la taille d’origine (par défaut 100%), le pourcentage de compression désiré. Il y a également un argument facultatif pour la qualité de l’image de sortie, qui est définie par défaut à 95.

La fonction commence par ouvrir l’image d’entrée à l’aide de la méthode Image.open de la bibliothèque PIL. Elle utilise ensuite la méthode resize pour redimensionner l’image selon le pourcentage spécifié par l’utilisateur. Enfin, elle sauvegarde l’image compressée à l’emplacement spécifié par l’utilisateur à l’aide de la méthode save. Cette méthode utilise également l’argument de qualité pour assurer que l’image compressée conserve une qualité d’image élevée.

La fonction utilise également la bibliothèque os pour récupérer la taille des fichiers d’entrée et de sortie. Elle calcule ensuite le pourcentage de réduction de la taille de l’image et l’affiche à l’utilisateur à l’aide de la méthode print.

La fonction est ensuite modifiée pour qu’elle puisse être appliquée à toutes les images dans un dossier. Elle utilise la méthode os.listdir pour récupérer la liste des fichiers dans le dossier spécifié par l’utilisateur, puis elle boucle sur chaque fichier et applique la fonction compress_image à chaque image.

Enfin, une dernière modification est apportée pour que l’utilisateur puisse spécifier les paramètres de la fonction à partir de la ligne de commande. L’utilisateur est invité à saisir le pourcentage de compression et la qualité de l’image de sortie. Les paramètres sont ensuite vérifiés pour s’assurer qu’ils sont valides avant d’être utilisés.

Code complet du script pour compresser des images / photo

Ci-dessous, vous trouverez le code complet pour compresser des images et photos en Python. J’espère qu’il vous sera utile.


from PIL import Image
import os

def compress_image(input_path, output_path, percent=100, quality=95):


    with Image.open(input_path) as img:
        # Scale the image by the given percent
        width, height = img.size
        img = img.resize((int(width*percent/100), int(height*percent/100)))

        # Compress the image without losing quality
        img.save(output_path, optimize=True, quality=quality)

    # Print the size difference
    input_size = os.path.getsize(input_path)
    output_size = os.path.getsize(output_path)
    percent = round(100 * (input_size - output_size) / input_size, 2)
    print(f"L'image {input_path} a désormais une taille de {output_size/1000} ko contre {input_size/1000} ko avant")


input_dir = "entree"
output_dir = "sortie"

# Demander les paramètres de la fonction à l'utilisateur
percent = int(input("Entrez le pourcentage de réduction de taille (0-100) : "))
quality = int(input("Entrez le niveau de qualité de compression (1-95) : "))

# Parcourir tous les fichiers dans le dossier d'entrée
for filename in os.listdir(input_dir):
    if filename.endswith(".jpg") or filename.endswith(".jpeg") or filename.endswith(".png"):
        # Chemin complet du fichier d'entrée
        input_path = os.path.join(input_dir, filename)

        # Chemin complet du fichier de sortie
        output_path = os.path.join(output_dir, filename)

        # Appliquer la fonction de compression à l'image
        compress_image(input_path, output_path, percent=percent, quality=quality)

Pour ceux qui préfère le code en couleur :

Code Python pour compresser des images

Explication du fonctionnement du script

Le code ci-dessus est un script Python qui permet de compresser des images en réduisant leur taille sans perte de qualité. Voici une explication étape par étape :

  1. Importation des bibliothèques PIL (Python Imaging Library) et os La première ligne importe la bibliothèque PIL, qui fournit des fonctionnalités pour travailler avec des images, tandis que la deuxième ligne importe la bibliothèque os, qui fournit des fonctionnalités pour interagir avec le système d’exploitation.
  2. Définition de la fonction compress_image() La fonction compress_image() prend en entrée les chemins d’accès à une image d’entrée et une image de sortie, ainsi que deux paramètres facultatifs : percent et quality. percent est le pourcentage de réduction de la taille de l’image, et quality est le niveau de qualité de compression de l’image. La fonction ouvre l’image d’entrée en utilisant la méthode Image.open(), redimensionne l’image en fonction du pourcentage donné, puis compresse l’image sans perdre de qualité en utilisant la méthode img.save(). Enfin, la fonction affiche la taille de l’image originale et celle de l’image compressée.
  3. Définition des variables input_dir et output_dir input_dir est le chemin d’accès au dossier contenant les images d’entrée, tandis que output_dir est le chemin d’accès au dossier où les images compressées doivent être enregistrées.
  4. Demander les paramètres de la fonction à l’utilisateur Les paramètres percent et quality sont demandés à l’utilisateur en utilisant la fonction input(). Les entrées utilisateur sont ensuite converties en entiers à l’aide de la fonction int().
  5. Parcourir tous les fichiers dans le dossier d’entrée La boucle for parcourt tous les fichiers dans le dossier d’entrée et vérifie s’ils ont une extension .jpg, .jpeg ou .png. Si un fichier a l’une de ces extensions, la fonction compress_image() est appelée pour compresser l’image.
  6. Appeler la fonction compress_image() La fonction compress_image() est appelée pour chaque image dans le dossier d’entrée. Les paramètres percent et quality sont passés à la fonction, ainsi que les chemins d’accès à l’image d’entrée et à l’image de sortie.

En somme, ce script est très utile pour réduire la taille de plusieurs images en même temps sans perdre de qualité. Les paramètres de pourcentage et de qualité peuvent être facilement modifiés par l’utilisateur, ce qui permet une grande flexibilité.

Tester le script Python en compressant des images

Maintenant que tout est prêt, il est temps de tester le scripts pour voir les résultats. Pour cela, j’ai un dossier dans lequel j’ajoute mon script que j’appellerais « compress.py ». Dans ce même dossier, j’ai un dossier « entree » et un dossier « sortie ».

Dans le dossier « entree », j’ajoute les photos que je souhaite compresser. Je lance le terminal et j’indique le premier paramètre. Ce dernier me permet d’indiquer le pourcentage de la taille initiale que je souhaite conserver. Par exemple, si mon image fait 100 px par 100 px. Si j’indique que je souhaite une réduction à 60 %, cela signifie que l’image sortira avec une taille de 60 px par 60 px, ce qui diminue aussi son poids.

Le second paramètre est la qualité de compression, plus le chiffre est élevé moins la compression est importante, plus le chiffre est bas plus la compression est importante, par contre la qualité de l’image sera diminuée aussi. Généralement, j’utilise une valeur de 80.

Voilà le type de résultat que l’on peut obtenir ci-dessous :

Dans le premier cas, l’image avait une taille de 234 ko avant, puis 137 ko après compression. Dans le second cas, la taille était de 125 ko avant et 81 ko après.

Conclusion

En conclusion, ce script offre une solution simple et efficace pour compresser des images tout en maintenant une qualité d’image élevée. Avec ses fonctionnalités supplémentaires pour traiter plusieurs images à la fois et pour demander des paramètres personnalisés à l’utilisateur, il s’agit d’un outil très utile pour les professionnels de la photographie et tous ceux qui travaillent avec des images sur une base régulière.