Google app engine TInyPNG与Google应用程序引擎数据存储的集成
我需要从不同的URL获取图像,并在压缩后将其存储在Google数据存储中。我知道tinyPNG是一个很好的压缩API,但该API只支持AmazonS3Google app engine TInyPNG与Google应用程序引擎数据存储的集成,google-app-engine,google-cloud-datastore,image-compression,Google App Engine,Google Cloud Datastore,Image Compression,我需要从不同的URL获取图像,并在压缩后将其存储在Google数据存储中。我知道tinyPNG是一个很好的压缩API,但该API只支持AmazonS3 有人可以指导如何在Google App Engine中实现这一点。您提到的仅支持S3的功能仅适用于直接从服务器上传压缩图像,即不通过发出图像压缩请求的应用程序传递图像,这只是一个方便的功能。发件人: 上传到AmazonS3 您可以告诉Tinfy API将压缩图像直接上载到 亚马逊S3。如果您使用S3托管您的图像,这将节省您的麻烦 将图像下载到服务
有人可以指导如何在Google App Engine中实现这一点。您提到的仅支持S3的功能仅适用于直接从服务器上传压缩图像,即不通过发出图像压缩请求的应用程序传递图像,这只是一个方便的功能。发件人: 上传到AmazonS3 您可以告诉Tinfy API将压缩图像直接上载到 亚马逊S3。如果您使用S3托管您的图像,这将节省您的麻烦 将图像下载到服务器并上载到S3 你自己
您的应用程序应该能够使用REST API下载压缩图像并将其保存到数据存储。由于谷歌应用程序引擎是只读的,您无法使用内置的tinify函数向其写入文件。不过,您可以在应用程序引擎中使用blob存储。确保您在GAE应用程序的libs文件夹中有Tinfy使用的Tinfy代码和请求模块。我需要2.3版的请求才能让tinify工作 要在GAE中使用图像存储,请为具有blob存储的实体定义数据库模型,如:
from google.appengine.ext import ndb
class Image(ndb.Model):
img = ndb.BlobProperty()
现在,我们需要tinify中的一个函数,该函数将写入实体的blob存储,而不是写入文件。您可以镜像现有的tinify代码以写入文件:
在source.py文件中,添加以下方法:
from google.appengine.ext import ndb
class Source(object):
...
def to_blob(self, key):
return self.result().to_blob(key)
...
from google.appengine.ext import ndb
class Result(ResultMeta):
...
def to_blob(self, key):
img_store = key.get()
img_store.img = self.data
...
在result.py文件中添加以下方法:
from google.appengine.ext import ndb
class Source(object):
...
def to_blob(self, key):
return self.result().to_blob(key)
...
from google.appengine.ext import ndb
class Result(ResultMeta):
...
def to_blob(self, key):
img_store = key.get()
img_store.img = self.data
...
现在tinify可以用GAE写下你可以随心所欲的服务。您只需要创建一个实体,将密钥传递给Source.to_blob方法,您的实体现在将存储压缩图像。现在你可以做:
class Basepage(webapp2.RequestHandler):
def post(self):
...
img_store = Image()
img_key = img_store.put()
# Use URL for image to be compressed
source = tinify.from_url("http://...")
source.to_blob(img_key)
compressed_img_store = img_key.get()
self.response.headers['Content-Type'] = 'image/png'
self.response.out.write(compressed_img_store.img)