2013-05-10 90 views
1

我目前正在Appengine制作一个图片分享网站,主要是为了我想要它,但有时候我想要一个图像的小版本(缩略图) - 目前我正在用HTML缩小它,但是如果完全没有必要,浏览器仍然会加载完整的(最多32MB的图片)。如何显示质量较低,较小的图像以节省带宽?Appengine blobstore,存储完整大小的图像和小图像?

服务图像的代码。这是'mysite.com/view'

class ViewPhotoHandler(blobstore_handlers.BlobstoreDownloadHandler): 
    def get(self, photo_key): 
     if not blobstore.get(photo_key): 
      self.error(404) 
     else: 
      self.send_blob(photo_key) 

请求图像的代码。

p.blob_key是一个字符串

link = '/view/%s' % p.blob_key 
self.response.write('<img src="' + link + '" alt="Image" height="50" width="50">') 

所以,一切工作应该如何,但请求的小版本的图像时,它浪费了太多的带宽。

关于如何解决这个问题的任何想法? 感谢

回答

2

从图像包中使用该功能get_serving_url

from google.appengine.api.images import get_serving_url 

url = get_serving_url(blob_key, size=None, crop=False, secure_url=None) 

您可以调整图片的大小,有无剪裁它。

图像API文档:https://developers.google.com/appengine/docs/python/images/functions

注意:您现在的处理程序并不需要成为BlobstoreDownloadHandler一个子类。

编辑:处理错误。

documentation:Images API在本地计算机上进行测试期间,本地使用Python Imaging Library(PIL)转换图像。您需要下载PIL模块并将其安装到您的本地计算机上,以使用SDK中的Images API。

+0

感谢您的帮助,但没有奏效,我得到了这个错误; 线68,在_transform_image 图像= _get_images_stub()._ OpenImageData(IMAGE_DATA) AttributeError的: 'ImagesNotImplementedServiceStub' 对象有没有属性 '_OpenImageData' – Joseph 2013-05-10 19:49:37

+0

您需要安装PIL的图像API到本地机器上工作。请参阅编辑答案。 – 2013-05-10 20:00:17

+0

谢谢,但运行Python 2.7时无法安装PIL,并且我不能使用2.5,有任何建议吗? – Joseph 2013-05-10 20:12:26