Как настроить качество изображения с измененным размером в Python Imaging Library?

Я работаю над PIL и мне нужно знать, можно ли настроить качество изображения при изменении размера или уменьшении изображения. Из того, что я знаю, качество по умолчанию установлено на 85. Можно ли настроить этот параметр во время изменения размера?

В настоящее время я использую следующий код:

image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)

ANTIALIAS Параметр предположительно дает наилучшее качество. Мне нужно знать, сможем ли мы получить более детализированный выбор качества.

5 ответов

Решение

Используйте PIL resize метод вручную:

image = image.resize((x, y), Image.ANTIALIAS)  # LANCZOS as of Pillow 2.7

Затем следует метод сохранения

quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)

Посмотрите на источник для models.py из фотолога, чтобы посмотреть, как они это делают.

ANTIALIAS никоим образом не сопоставимы с уровнем качества "85". Параметр ANTIALIAS сообщает методу миниатюр, какой алгоритм использовать для повторной выборки пикселей из одного размера в другой. Например, если у меня есть изображение 3х3, которое выглядит так:

2 2 2
2 0 2
2 2 2

и я изменить его размер до 2x2, один алгоритм может дать мне:

2 2
2 2

потому что большинство пикселей рядом 2s, а другой может дать мне:

1 1
1 1

для того, чтобы принять во внимание 0 в середине. Но вы все еще не начали иметь дело со сжатием, и не будете, пока вы не сохраните изображение. Иными словами, в миниатюрах вы имеете дело не с градациями качества, а с дискретными алгоритмами пересэмплирования. Так что нет, вы не можете получить более полный контроль здесь.

Если вы сохраняете в формате со сжатием с потерями, это место для указания уровней качества.

Не путайте масштабирование и сжатие.

Для лучшего качества вы должны использовать оба. Смотрите следующий код:

from PIL import Image

image = Image.open(filename)
image.thumbnail((x, y), Image.ANTIALIAS)
image.save(filename, quality=100)

Таким образом, у меня очень хорошие пальцы в моих программах.

Antialias N установить качество, как 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

Один из способов добиться лучшего качества - выполнить масштабирование в два этапа. Например, если исходное изображение имеет размер 1200x1200 и вам необходимо изменить его размер до 64x64 пикселей, то на первом шаге уменьшите его до середины этих двух размеров:

1200x1200 -> 600x600 -> 64x64

Другие вопросы по тегам