Objeto de Python Google App Engine Image

Usando Python Image Library PIL y Google App Engine Blobstore …

Esta:

img = images.Image(blob_key=image) logging.info(img.size) self.response.headers['Content-Type'] = 'image/jpeg' self.response.out.write(img) 

Tiene error de atributo:

 AttributeError: 'Image' object has no attribute 'size' 

Entonces, ¿la instancia de Imagen del motor de aplicaciones de Google no tiene tamaño?

Entonces, ¿cómo funciona esto?

 img = images.Image(blob_key=image) img.resize(width, height) img.im_feeling_lucky() thumbnail = img.execute_transforms(output_encoding=images.JPEG) self.response.headers['Content-Type'] = 'image/jpeg' self.response.out.write(thumbnail) 

¿Qué me estoy perdiendo?

EDITAR:

La solución fue usar get_serving_url y no usar mi servidor de imágenes como lo propone @voscausa. Debido al hecho de que mi objeto fue analizado por las plantillas de jinja2, fue imposible crear un objeto de imagen a través de jinja2. Así que la solución final funcionó de la siguiente manera:

 class Mandelbrot(db.Model): image = blobstore.BlobReferenceProperty() @property def image_url(self): return images.get_serving_url(self.image) 

De esta manera podría analizar la url de la imagen a mi página como:

  

No estoy familiarizado con PIL, porque uso otra solución de Google para servir y dimensionar imágenes. Google puede servir las imágenes por usted, usando el servicio de imágenes de alto rendimiento de Google. Esto significa:

  • tienes que crear una vez, un serve_url para imágenes en el blobstore usando: get_serving_url
  • Puede cambiar el tamaño de la imagen servida. El original no se cambia.
  • Google servirá las imágenes casi gratis para ti. No necesitas un manejador. Solo pagas el ancho de banda

Aquí hay un ejemplo. Puedes cambiar el = s0, para cambiar el tamaño. s0 devuelve el tamaño original.

 https://lh6.ggpht.com/1HjICy6ju1e2GIg83L0qdliUBmPHUgKV8FP3QGK8Qf2pHVBfwkpO_V38ifAPm-9m20q_3ueZzdRCYQNyDE3pmA695iaLunjE=s0 

get_serving_url docs: https://developers.google.com/appengine/docs/python/images/functions

Código:

 class Dynamic(db.Model): # key : name name = db.StringProperty() blob_ref = blobstore.BlobReferenceProperty() serving_url = db.LinkProperty() dyn= Dynamic.get_by_key_name(key_name) try : # get url with size = 0 dyn.serving_url = images.get_serving_url(dyn.blob_ref, size=None, secure_url=True) except DeadlineExceededError : try : # sometimes this request fails, retry. This always works fine dyn.serving_url = images.get_serving_url(dyn.blob_ref, size=None, secure_url=True) except DeadlineExceededError : logging.error('Image API get_serving_url deadline error after retry' %(dyn.key().name())) return None dyn.put() 

Parece que la versión GAE de PIL no implementa .size . Use algo como esto en su lugar:

 logging.info((img.width, img.height))