Python, PIL и JPEG на Heroku

У меня есть сайт Django, размещенный на Heroku. Одна из моделей имеет поле изображения, которое принимает загруженные изображения, изменяет их размеры и толкает их на Amazon S3, чтобы их можно было сохранить настойчиво.

Это хорошо работает, используя PIL

def save(self, *args, **kwargs):


    # Save this one
    super(Product, self).save(*args,**kwargs)

    # resize on file system
    size = 200, 200
    filename = str(self.thumbnail.path)
    image = Image.open(filename)
    image.thumbnail(size, Image.ANTIALIAS)
    image.save(filename)

    # send to amazon and remove from ephemeral file system
    if put_s3(filename):
        os.remove(filename)
        return True

Однако PIL, похоже, отлично работает для PNG и GIF, но не скомпрометирован libjpeg. В локальной среде разработки или полностью контролируемом "nix-сервере" это просто случай установки расширения jpeg.

Но кто-нибудь знает, возможно ли манипулирование Jpeg, используя стек кедра Хероку? Есть ли что-то еще, что можно добавить в requirements.txt?

Среди других несвязанных пакетов, файл требований .txt для этого virtualenv включает в себя:

Django==1.3.1
PIL==1.1.7
distribute==0.6.24
django-queued-storage==0.5
django-storages==1.1.4
psycopg2==2.4.4
python-dateutil==1.5
wsgiref==0.1.2

Спасибо

Ответы

Ответ 1

Я использую эту вилку PIL в файле требований .txt:

-e hg+https://bitbucket.org/etienned/pil-2009-raclette/#egg=PIL

и может использовать JPEG без проблем:

       --------------------------------------------------------------------
       PIL 1.2a0 SETUP SUMMARY
       --------------------------------------------------------------------
       version       1.2a0
       platform      Python 2.7.2 (default, Oct 31 2011, 16:22:04)
                     [GCC 4.4.3] on linux2
       --------------------------------------------------------------------
       *** TKINTER support not available
       --- JPEG support available
       *** WEBP support not available
       --- ZLIB (PNG/ZIP) support available
       --- FREETYPE2 support available
       --- LITTLECMS support available
       --------------------------------------------------------------------

Ответ 2

Также рассмотрите возможность использования Pillow, "дружественной" вилки PIL, которая предлагает:

  • Совместимость с Setuptools
  • Совместимость с Python 3
  • Частый цикл выпуска
  • Исправлены многие ошибки.