我使用以下代码成功将图片发布到我的Google AppEngine应用程序:
def post(self):
image_data = self.request.get('file')
file_name = files.blobstore.create(mime_type='image/png')
# Open the file and write to it
with files.open(file_name, 'a', exclusive_lock=True) as f:
f.write(image_data)
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)
self.response.out.write(images.get_serving_url( blob_key ))
但是,当我浏览get_serving_url()
输出的网址时,图片始终,分辨率降低。 为什么?我已经检查并仔细检查过的图片尺寸是否正确(从iPhone相机,大约3200x2400分辨率)。然而,服务的图像总是512x384。
我是GAE的新手,但我认为上面的代码应该将图像存储在BlobStore而不是数据存储区中,以避免1 MB的限制。
有没有人知道会发生什么?
干杯, 布雷特
答案 0 :(得分:3)
找到解决方案。或者至少对我有用的东西。
我将=sXX
附加到已投放网址的末尾,AppEngine将以XX
分辨率投放图片。例如,如果行:
self.response.out.write(images.get_serving_url( blob_key ))
返回:
http://appengine.sample.com/appengineurlkey
然后,当调用上面的url结果时,图像将是较低分辨率的图像,
然后通过调用URL:
http://appengine.sample.com/appengineurlkey**=s1600**
生成的服务图片的分辨率为1600x1200
(或通过保持宽高比限制类似的分辨率)。
答案 1 :(得分:0)
https://developers.google.com/appengine/docs/python/images/functions
中解释了您所看到的内容的解释在get_serving_url
的文档中:
调整图像大小或裁剪图像时,必须使用0到1600的整数指定新大小。最大大小在IMG_SERVING_SIZES_LIMIT中定义。 API将图像调整为提供的值,将指定的大小应用于图像的最长尺寸并保留原始高宽比。
如果您想要提供全尺寸图像,另一种方法是将图像直接上传到blobstore,然后从那里提供。 (即,完全绕过图像API。)请参阅https://developers.google.com/appengine/docs/python/blobstore/overview