1

Python Image Library PIL と Google App Engine Blobstore の使用...

これ:

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

属性エラーがあります:

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

では、Google App Engine の Image インスタンスにはサイズがありませんか?

それでは、これはどのように機能しますか:

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)

私は何が欠けていますか?

編集:

修正は get_serving_urlを使用し、@voscausa によって提案された私のイメージ サーバーを使用しませんでした。オブジェクトが jinja2 テンプレートによって解析されたため、jinja2 を介して Image オブジェクトを作成することはできませんでした。したがって、最終的な解決策は次のように機能しました。

class Mandelbrot(db.Model):
  image = blobstore.BlobReferenceProperty()

@property
def image_url(self):
  return images.get_serving_url(self.image)

このようにして、次のように画像の URL をページに解析できます。

<img src=
{% if mandelbrot.image %}
  "{{ mandelbrot.image_url }}" 
{% else %} 
  "./assets/img/preloader.gif"
{% endif %}
/>
4

2 に答える 2

3

画像の提供とサイズ変更に Google の別のソリューションを使用しているため、私は PIL に精通していません。Google High Performance Image serving を使用して、Google が画像を提供できます。これの意味は:

  • get_serving_urlを使用して、ブロブストア内の画像のserving_urlを一度作成する必要があります
  • 提供される画像のサイズを変更できます。オリジナルは変わらない
  • Google は画像をほぼ無料で提供します。ハンドラーは必要ありません。帯域幅のみを支払う

ここに例があります。=s0 を変更して、サイズを変更できます。s0 は元のサイズを返します。

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

get_serving_url ドキュメント: https://developers.google.com/appengine/docs/python/images/functions

コード :

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()
于 2012-12-10T23:46:55.063 に答える
1

PIL の GAE バージョンは を実装していないよう.sizeです。代わりに次のようなものを使用してください。

logging.info((img.width, img.height))
于 2012-12-10T23:06:23.107 に答える