Comment ajuster la qualité d'une image redimensionnée dans Python Imaging Library?
-
05-07-2019 - |
Question
Je travaille sur PIL et j'ai besoin de savoir si la qualité de l'image peut être ajustée lors du redimensionnement ou de la miniature d'une image. D'après ce que je sais, la qualité par défaut est définie sur 85. Ce paramètre peut-il être modifié pendant le redimensionnement?
J'utilise actuellement le code suivant:
image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)
Le paramètre ANTIALIAS
donne vraisemblablement la meilleure qualité. J'ai besoin de savoir si nous pouvons obtenir plus de précision sur l'option qualité.
La solution
Utilisez la méthode resize
de PIL manuellement:
image = image.resize((x, y), Image.ANTIALIAS) # LANCZOS as of Pillow 2.7
Suivi de la méthode de sauvegarde
quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)
Consultez la source de < code> models.py de Photologue pour voir comment ils le font.
Autres conseils
ANTIALIAS n’est en aucun cas comparable au "85" niveau de qualité. Le paramètre ANTIALIAS indique à la méthode de la vignette quel algorithme utiliser pour le rééchantillonnage des pixels d'une taille à une autre. Par exemple, si j'ai une image 3x3 ressemblant à ceci:
2 2 2
2 0 2
2 2 2
et je le redimensionne à 2x2, un algorithme pourrait me donner:
2 2
2 2
car la plupart des pixels à proximité sont des 2s, alors qu'un autre pourrait me donner:
1 1
1 1
afin de prendre en compte le 0 au milieu. Mais vous n'avez toujours pas commencé à gérer la compression et vous ne le ferez pas tant que vous n'enregistrez pas l'image. Ce qui veut dire qu'en vignette, vous ne travaillez pas avec des gradations de qualité, mais avec des algorithmes discrets pour le ré-échantillonnage. Donc non, vous ne pouvez pas obtenir un contrôle plus fin ici.
Si vous enregistrez dans un format avec une compression avec perte, c’est l’endroit idéal pour spécifier les niveaux de qualité.
Ne confondez pas le redimensionnement et la compression.
Pour une qualité optimale, vous devez utiliser les deux. Voir le code suivant:
from PIL import Image
image = Image.open(filename)
image.thumbnail((x, y), Image.ANTIALIAS)
image.save(filename, quality=100)
De cette façon, j'ai de très bons pouces dans mes programmes.
Antialias n définit la qualité sur 90
img = img.resize((128,128),Image.ANTIALIAS)
img.save(os.path.join(output_dir+'/'+x,newfile),"JPEG",quality=90)
http://www.dzone.com/snippets/resize-thousands- images-python
Une des façons d’améliorer la qualité consiste à procéder à la réduction d’échelle en deux étapes. Par exemple, si votre image d'origine mesure 1 200 x 1 200 et que vous devez la redimensionner à 64 x 64 pixels, réduisez-la à la première étape au milieu de ces deux tailles:
1200x1200 - > 600x600 - > 64x64