Как настроить качество изображения с измененным размером в 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