2012-04-18 19 views
14

Tengo un sitio Django, alojado en Heroku. Uno de los modelos tiene un campo de imagen, que toma las imágenes cargadas, las redimensiona y las envía a Amazon S3 para que puedan almacenarse de manera persistente.Python, PIL y JPEG en Heroku

Esto está funcionando bien, usando 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 

Sin embargo, PIL parece funcionar bien para PNG y GIF, pero no se compliled con libjpeg. En un entorno de desarrollo local o en un servidor nix totalmente controlado, simplemente se trata de instalar la extensión jpeg.

¿Alguien sabe si la manipulación de Jpeg es posible usando la pila de Cedar Heroku? ¿Hay algo más que se pueda agregar a requirements.txt?

Entre otros paquetes no relacionados, la requirements.txt para este virtualenv incluye:

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 

Gracias

Respuesta

21

utilizo este tenedor PIL en requirements.txt:

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

y puede utilizar JPEG sin problemas:

 -------------------------------------------------------------------- 
     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 
     -------------------------------------------------------------------- 
+3

Gracias ¡eres demasiado! eso funcionó a la perfección! Tuve algunos problemas para conseguir que Heroku retirara una dependencia de mercurial, así que copié la biblioteca a github y me vinculé a ella. – errkk

+2

Tienes un clon de ese proyecto en github? ¿Puedes señalarme por favor? –

+2

[https://github.com/errkk/gitpil](https://github.com/errkk/gitpil) – errkk

8

También por favor, considere el uso de Pillow, el "amigo" tenedor PIL que ofrece:

compatibilidad
  • Setuptools
  • Python 3 compatibilidad
  • ciclo
  • Muchas correcciones de errores de liberación frecuente
+0

Ventajas de Pillow: Pillow se puede instalar con pip: 'pip install pillow'. Del mismo modo, simplemente puede escribir 'pillow' en' requirements.txt'. –

+2

Ahora es el año 2017.'pip install pillow' todavía requiere la instalación previa de' libjpeg' por otros medios. Ver [este enlace] (https://pillow.readthedocs.io/en/latest/installation.html#external-libraries). –

Cuestiones relacionadas