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é.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top