Google app engine 使用Google应用程序引擎图像获取服务url()的清晰示例

Google app engine 使用Google应用程序引擎图像获取服务url()的清晰示例,google-app-engine,image-processing,google-cloud-platform,blobstore,Google App Engine,Image Processing,Google Cloud Platform,Blobstore,有人知道这样的例子吗?我在谷歌的文档中找不到一个url。get\u service\u url有文档记录。这本身没有端到端的示例,但非常简单:您向其传递一个blob键,以及可选的调整大小和裁剪选项,然后返回一个URL。你可以在任何你想引用图片的地方使用这个URL,它将由基础设施提供服务,适当地调整大小和裁剪 请注意,这仅适用于上载到blobstore的图像。任何上传到常规数据存储并存储在BlobProperty中的内容,您都必须自行调整大小、裁剪并提供服务。获取服务url。这本身没有端到端的示例

有人知道这样的例子吗?我在谷歌的文档中找不到一个url。

get\u service\u url
有文档记录。这本身没有端到端的示例,但非常简单:您向其传递一个blob键,以及可选的调整大小和裁剪选项,然后返回一个URL。你可以在任何你想引用图片的地方使用这个URL,它将由基础设施提供服务,适当地调整大小和裁剪


请注意,这仅适用于上载到blobstore的图像。任何上传到常规数据存储并存储在
BlobProperty
中的内容,您都必须自行调整大小、裁剪并提供服务。

获取服务url
。这本身没有端到端的示例,但非常简单:您向其传递一个blob键,以及可选的调整大小和裁剪选项,然后返回一个URL。你可以在任何你想引用图片的地方使用这个URL,它将由基础设施提供服务,适当地调整大小和裁剪


请注意,这仅适用于上载到blobstore的图像。任何上传到常规数据存储并存储在
BlobProperty
中的内容,您都必须自行调整大小、裁剪并提供服务。

尽管有文档,但也需要一段时间

现在我对它有了更好的理解(我想!),我将举一个例子

get\u service\u url()
位于
google.appengine.ext.blobstore
类中,以及
BlobKey

BlobKey
可以从以下字符串构造:
blobstore.BlobKey(“这是键”)

因此,这为我们提供了基本实现
get\u service\u url()
所需的一切:

到目前为止一切都很好

该函数还接受三个关键字参数。它们是
大小
裁剪
安全url
rpc

  • secure\u url=True
    只返回
    https
    url,而不是
    http
    (默认值为
    False
  • rpc
    是异步处理的某些设置的
    rpc
    对象。我对它的理解不够,无法解释,甚至无法亲自使用它
  • crop=True
    按偶数比例裁剪图像正方形
size
一开始让我感到困惑。它本身不会生成不同的URL。唯一的区别在于后缀
=sXX
,您可以自行设置

就我个人而言,我将原始大小的URL存储在我的
db.Model
中,然后在任何地方使用
imgUrl+'=s150'
(例如)。无需为所需的每个不同大小调用
get\u service\u url()
,无需对性能造成影响,因为它的作用完全相同

还要注意,指定的大小是图像的最大尺寸。这奇怪地隐藏在文档中-我假设它一定是宽度,但如果图像是“肖像”,当然是高度

您还可以附加
-c
(相当于
crop=True

因此,对于我们更完整的(尽管我缺乏演示
RPC
对象使用的知识)示例:

从google.appengine.ext.blobstore导入BlobKey
从google.appengine.api.images导入获取服务url
从webapp2导入RequestHandler
类示例(RequestHandler):
def get(自我):
key=BlobKey('imagekey'))
url=get\u service\u url(key,secure\u url=True)
#获取服务url(密钥,安全url=True,大小=150,裁剪=True)
URLTumb=url+'=s150-c'
#获取服务url(密钥,安全url=True,大小=50)
urlMini=url+'=s50'
self.response.write('这是我的缩略图:
'%URLTumb) self.response.write('这是迷你我!:
'%urlMini) self.response.write('And back to full-size:
'%url)
然后,这些URL可以存储在数据存储中,存储在与它们相关的任何模型中。这比使用完全不同的
db.BlobProperty
更可取,因为它根本不适用于图像。它也更昂贵,效率更低


当然,我建议您只存储
url
(如上所述),因为添加字符串后缀很容易更改大小!事实上,您可以在Jinja模板(或等效模板)中执行此操作,否则您可能会在CSS中指定
width=
并通过执行相同的操作进行裁剪

现在我对它有了更好的理解(我想!),我将举一个例子

get\u service\u url()
位于
google.appengine.ext.blobstore
类中,以及
BlobKey

BlobKey
可以从以下字符串构造:
blobstore.BlobKey(“这是键”)

因此,这为我们提供了基本实现
get\u service\u url()
所需的一切:

到目前为止一切都很好

该函数还接受三个关键字参数。它们是
大小
裁剪
安全url
rpc

  • secure\u url=True
    只返回
    https
    url,而不是
    http
    (默认值为
    False
  • rpc
    是异步处理的某些设置的
    rpc
    对象。我对它的理解不够,无法解释,甚至无法亲自使用它
  • crop=True
    按偶数比例裁剪图像正方形
size
一开始让我感到困惑。它本身不会生成不同的URL。唯一的区别在于后缀
=sXX
,您可以自行设置

就我个人而言,我将原始大小的URL存储在我的
db.Model
中,然后在任何地方使用
imgUrl+'=s150'
(例如)。无需调用的
get\u service\u url()
from google.appengine.ext.blobstore import BlobKey
from google.appengine.api.images import get_serving_url

key = BlobKey('imagekey')
url = get_serving_url(key)
from google.appengine.ext.blobstore import BlobKey
from google.appengine.api.images import get_serving_url
from webapp2 import RequestHandler

class sample(RequestHandler):

    def get(self):
        key = BlobKey('imagekey')
        url = get_serving_url(key, secure_url=True)

        #get_serving_url(key, secure_url=True, size=150, crop=True)
        urlThumb = url + '=s150-c'

        #get_serving_url(key, secure_url=True, size=50)
        urlMini  = url + '=s50'

        self.response.write('Here is my thumbnail: <img src="%s"><br>'%urlThumb)
        self.response.write('Here is mini-me!: <img src="%s"><br>'%urlMini)
        self.response.write('And back to full-size: <img src="%s"><br>'%url)
   @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws IOException {
            BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));

            ImagesService imagesService = ImagesServiceFactory.getImagesService();

            String url = imagesService.getServingUrl(ServingUrlOptions.Builder.withBlobKey(blobKey).crop(true).imageSize(200));
            PrintWriter out = res.getWriter();
            out.println("Here is my thumbnail! <img src="+ url + ">");

        }
}