Как настроить качество измененного изображения в библиотеке изображений Python?
Я работаю над PIL и должен знать, можно ли регулировать качество изображения при изменении размера или уменьшении изображения. Из того, что я знаю, значение по умолчанию установлено на 85. Можно ли настроить этот параметр при изменении размера?
В настоящее время я использую следующий код:
image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)
Параметр ANTIALIAS
, по-видимому, дает лучшее качество. Мне нужно знать, можем ли мы получить дополнительную детализацию по качеству.
Ответы
Ответ 1
Использовать метод 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
из Photologue, чтобы узнать, как они это делают.
Ответ 2
ANTIALIAS никоим образом не сравнится с уровнем качества "85". Параметр ANTIALIAS сообщает методу эскизов, какой алгоритм используется для передискретизации пикселей от одного размера к другому. Например, если у меня есть изображение 3x3, которое выглядит так:
2 2 2
2 0 2
2 2 2
и я изменяю его размер до 2x2, один алгоритм может дать мне:
2 2
2 2
потому что большинство пикселей около 2s, а другая может дать мне:
1 1
1 1
чтобы принять во внимание 0 в середине. Но вы все еще не начали заниматься сжатием, и не будете, пока не сохраните изображение. Это означает, что в миниатюре вы не имеете дело с градациями качества, а с дискретными алгоритмами для повторной дискретизации. Так что нет, вы не можете получить более тонкий контроль здесь.
Если вы сохраняете формат с сжатием с потерями, это место, чтобы указать уровни качества.
Ответ 3
Не путайте масштабирование и сжатие.
Для лучшего качества вы должны использовать оба. См. Следующий код:
from PIL import Image
image = Image.open(filename)
image.thumbnail((x, y), Image.ANTIALIAS)
image.save(filename, quality=100)
Таким образом, у меня очень хорошие пальцы в моих программах.
Ответ 4
Сглаживание 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
Ответ 5
Одним из способов достижения лучшего качества является уменьшение масштаба в два этапа. Например, если исходное изображение 1200x1200, и вам нужно изменить его размер до 64x64 пикселей, то на первом шаге уменьшите его до середины этих двух размеров:
1200x1200 → 600x600 → 64x64