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 réglée 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 granularité sur l'option qualité.
Utilisez la méthode resize
de PIL manuellement:
image = image.resize((x, y), Image.ANTIALIAS) # LANCZOS as of Pillow 2.7
Suivi par la méthode de sauvegarde
quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)
Jetez un œil à la source de models.py
de Photologue pour voir comment ils le font.
ANTIALIAS n'est en aucun cas comparable au niveau de qualité "85". Le paramètre ANTIALIAS indique à la méthode des miniatures quel algorithme utiliser pour rééchantillonner les pixels d'une taille à une autre. Par exemple, si j'ai une image 3x3 qui ressemble à 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 2, 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'aurez pas enregistré l'image. C'est-à-dire qu'en vignette, il ne s'agit pas de gradations de qualité, mais d'algorithmes discrets de rééchantillonnage. Donc non, vous ne pouvez pas obtenir un meilleur contrôle ici.
Si vous enregistrez dans un format avec compression avec perte, c'est l'endroit pour spécifier les niveaux de qualité.
Ne confondez pas le redimensionnement et la compression.
Pour la meilleure qualité, 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éfinir la qualité comme 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