Альтернативы визуализации Python
У меня есть код python, который нужно делать всего лишь несколько простых вещей для фотографий: обрезка, изменение размера и наложение водяного знака. Я использовал PIL, и результаты resample/resize TERRIBLE. Я использовал imagemagick, и интерфейс и команды были разработаны путем упаковки кошки в коробке, а затем многократно бросали ее вниз по лестнице с клавиатуры.
Я ищу что-то, что не является PIL или Imagemagick, что я могу использовать с python для простых и качественных преобразований изображений. В этом случае, даже если для интерфейса командной строки это хорошо, ему даже не нужно иметь привязки python.
О, и это должно быть относительно агностически, наши производственные серверы - это Linux, но некоторые из наших разработчиков разрабатываются на окнах. Он не может требовать установки кучи глупого кода gui для использования в качестве библиотеки.
Ответы
Ответ 1
Я использовал PIL, и результаты resample/resize TERRIBLE.
Их не должно быть, пока вы:
- использовать только фильтрацию изображений. ANTIALIAS для операций масштабирования.
- использовать только фильтрацию изображения .BICUBIC для операций масштабирования.
- не забудьте преобразовать в режим "RGB" перед изменением размера, если вы используете палитру изображения
- не используйте .thumbnail(). это дерьмо
- установите для уровня
quality=
что-то подходящее при сохранении JPEG (по умолчанию довольно низкое)
Ответ 2
Я не уверен, почему Image.thumbnail получает такой щелчок. В настоящем выпуске, что я убегаю от него, это немного больше, чем определить желаемый размер и изменить размер изображения на месте. Пока вы используете правильный фильтр повторной выборки и сначала конвертируете в RGB (как говорит bobince), миниатюра не должна отличаться от размера.
Здесь фактический источник для метода эскизов:
def thumbnail(self, size, resample=NEAREST):
# preserve aspect ratio
x, y = self.size
if x > size[0]: y = max(y * size[0] / x, 1); x = size[0]
if y > size[1]: x = max(x * size[1] / y, 1); y = size[1]
size = x, y
if size == self.size:
return
self.draft(None, size)
self.load()
try:
im = self.resize(size, resample)
except ValueError:
if resample != ANTIALIAS:
raise
im = self.resize(size, NEAREST) # fallback
self.im = im.im
self.mode = im.mode
self.size = size
self.readonly = 0
Ответ 3
PIL может производить хорошее изменение размера. Убедитесь, что исходное изображение находится в режиме RGB, а не в цветовых палитрах и попробуйте различные варианты выбора.
Ответ 4
Хотя imagemagick, по-видимому, является де-факто библиотекой изображений с открытым исходным кодом, возможно DevIL (кросс-платформа, похоже, выполняет простые операции с изображениями) или FreeImage.
Ответ 5
Вы отметили pypi? Беглый поиск показывает некоторые инструменты, связанные с изображением, я также обнаружил python-gd, не знаю, насколько это было бы полезно.
У меня никогда не было проблем с PIL, но может быть интересен какой-то сорт.
Ответ 6
У GIMP есть разумный интерфейс командной строки, я думаю.
Ответ 7
Взгляните на некоторые из этих библиотек изображений:
hxxp://pypi.python.org/pypi/collective.croppingimagefield/0.1betap >
hxxp://pypi.python.org/pypi/cropresize/0.1.1
hxxp://pypi.python.org/pypi/image_resize/1.0
Ответ 8
В прошлый раз, когда я сравнивал, этот вывод уменьшителя почти идентичен выходу GIMP "кубический":
import Image
def stretch(im, size, filter=Image.NEAREST):
im.load()
im = im._new(im.im.stretch(size, filter))
return im
IIRC, различия визуально неразличимы - некоторые значения пикселей +/- 1 из-за округления, и они, как правило, обходят края. Это тоже не замедляет.
cf: http://www.mail-archive.com/[email protected]/msg00248.html
Ответ 9
Я использовал PIL, и результаты resample/resize TERRIBLE.
Изменение размера в PIL было нарушено во многих отношениях, и PIL не поддерживается в течение длительного времени. Начиная с Pillow 2.7 устранены проблемы, а также значительное улучшение производительности. Убедитесь, что вы используете последнюю подушку.