Вопрос

У меня есть код на Python, который должен сделать всего пару простых вещей с фотографиями:обрезайте, изменяйте размер и накладывайте водяной знак.Я использовал PIL, и результаты повторной выборки / изменения размера УЖАСНЫ.Я использовал imagemagick, и интерфейс и команды были разработаны путем упаковки кошки в коробку, а затем многократного сбрасывания ее с лестницы на клавиатуру.

Я ищу что-то, что не является PIL или Imagemagick, что я мог бы использовать с python для выполнения простых, высококачественных преобразований изображений.Если уж на то пошло, ему даже не обязательно иметь привязки к python, если интерфейс командной строки хорош.

Да, и это должно быть относительно независимо от платформы, наши производственные серверы работают на Linux, но некоторые из наших разработчиков разрабатывают на Windows.Это также не может потребовать установки кучи глупого графического кода для использования в качестве библиотеки.

Это было полезно?

Решение

  

Я использовал PIL, и результаты изменения размера / размера УЖАСНЫ.

Они не должны быть, пока вы:

<Ол>
  • использовать только фильтрацию Image.ANTIALIAS для операций уменьшения масштаба
  • используйте только фильтр Image.BICUBIC для операций масштабирования.
  • не забудьте преобразовать в цветовой режим 'RGB' перед изменением размера, если вы используете изображение с палитрой
  • не используйте .thumbnail (). это дерьмо
  • установите уровень quality = на соответствующий уровень при сохранении JPEG-файлов (по умолчанию достаточно низкий)
  • Другие советы

    Я не уверен, почему Image.thumbnail становится таким уязвимым местом.В текущем выпуске, который я запускаю, он делает немногим больше, чем просто определяет желаемый размер и изменяет размер изображения на месте.Пока вы используете правильный фильтр повторной выборки и сначала конвертируете в RGB (как говорит бобинс), миниатюра не должна отличаться от изменения размера.

    Вот фактический источник для метода миниатюр:

    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
    

    PIL может сделать хорошее изменение размера. Убедитесь, что исходное изображение находится в режиме RGB, а не в цветах палитры, и попробуйте другой выбор алгоритма.

    Хотя imagemagick, по-видимому, является де-факто библиотекой изображений с открытым исходным кодом, возможно, DevIL ( кроссплатформенный, кажется, выполняет простые операции с изображениями) или FreeImage .

    Проверяли ли вы pypi ? Беглый поиск показывает некоторые инструменты, связанные с изображениями, я также обнаружил python-gd, но понятия не имею, насколько он может быть полезен.

    У меня никогда не было проблем с PIL, но какое-то разнообразие может быть интересным.

    GIMP имеет разумный интерфейс командной строки, я думаю.

    Взгляните на некоторые из этих библиотек изображений:

    hxxp://pypi.python.org/pypi/collective.croppingimagefield/0.1бета-версия

    hxxp://pypi.python.org/pypi/cropresize/0.1.1

    hxxp://pypi.python.org/pypi/image_resize/1.0

    В прошлый раз, когда я сравнивал, вывод этого даунскейлера почти идентичен выводу "кубического" в 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 / изображения сиг @ python.org / msg00248.html

      

    Я использовал PIL, и результаты изменения размера / размера УЖАСНЫ.

    Изменение размера в PIL было нарушено во многих отношениях, и PIL не поддерживается в течение длительного времени. Начиная с Подушка 2.7 большинство проблем устранено с резким улучшением производительности. Убедитесь, что вы используете последнюю подушку .

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top