Maison > développement back-end > Tutoriel Python > Comment puis-je redimensionner des images avec PIL tout en conservant les proportions ?

Comment puis-je redimensionner des images avec PIL tout en conservant les proportions ?

Linda Hamilton
Libérer: 2024-12-13 17:23:10
original
309 Les gens l'ont consulté

How Can I Resize Images with PIL While Maintaining Aspect Ratio?

Redimensionner les images avec PIL tout en préservant les proportions

La bibliothèque d'images Python (PIL) offre un ensemble complet de fonctions de manipulation d'images. Une opération utile consiste à redimensionner les images, mais de nombreux développeurs rencontrent des difficultés pour conserver le rapport hauteur/largeur d'origine. Cet article se penche sur ce problème et propose des solutions pour garantir un redimensionnement proportionnel de l'image.

Problème

En essayant de créer des vignettes, un utilisateur est tombé sur le défi suivant :

Y a-t-il un moyen évident de faire cela qui me manque ? J'essaie juste de créer des vignettes.

Solution

Pour redimensionner une image tout en préservant ses proportions, envisagez les étapes suivantes :

  1. Déterminer Dimensions maximales : Établissez une largeur et une hauteur maximales pour votre vignette. Ces valeurs définissent la taille de sortie souhaitée.
  2. Calculer le taux de redimensionnement : Calculez le taux de redimensionnement en divisant la largeur maximale par la largeur d'origine et la hauteur maximale par la hauteur d'origine. Le plus petit de ces ratios garantira un redimensionnement proportionnel.
  3. Calculer la nouvelle taille : Déterminez la nouvelle taille de l'image en multipliant la taille d'origine par le ratio de redimensionnement calculé.
  4. Méthode de la bibliothèque PIL : PIL fournit une approche simplifiée grâce à la méthode Image.thumbnail. Cette méthode modifie directement l'image, il est donc recommandé d'en faire une copie si nécessaire :
import os, sys
from PIL import Image

size = 128, 128  # Define the maximum size of the thumbnail

for infile in sys.argv[1:]:
    outfile = os.path.splitext(infile)[0] + ".thumbnail"  # Generate the output filename
    if infile != outfile:
        try:
            im = Image.open(infile)
            im_copy = im.copy()  # Create a copy to avoid modifying the original image
            im_copy.thumbnail(size, Image.Resampling.LANCZOS)  # Resize the image
            im_copy.save(outfile, "JPEG")  # Save the resized image
        except IOError:
            print(f"cannot create thumbnail for '{infile}'")  # Handle any exceptions
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal