大小参数不适用于图像的 Google CDN
Size Parameter doesn't work on Google CDN for images
我正在使用 webApp2 和 Google App Engine 开发一个简单的应用程序,并使用 images
和 blobstore
api 使用 Google CDN 提供上传的图像。我正在使用以下代码为图像生成服务 Url -
from google.appengine.api import images
from google.appengine.ext import blobstore
def _get_urls_for(self, file_name):
user = users.get_current_user()
if user is None:
return
bucket_name = app_identity.get_default_gcs_bucket_name()
path = os.path.join('/', bucket_name, user.user_id(), file_name)
real_path = '/gs' + path
key = blobstore.create_gs_key(real_path)
url = images.get_serving_url(key, size=0)
thumbnail_url = images.get_serving_url(key, size=150, crop=True)
return url, thumbnail_url
它给我 url 如下(例如)-
http://localhost:8080/_ah/img/encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0LzE4NTgwNDc2NDIyMDEzOTEyNDExOC9pbWc4NzYuanBn=s32
和
http://localhost:8080/_ah/img/encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0LzE4NTgwNDc2NDIyMDEzOTEyNDExOC9pbWc4NzYuanBn=s150-c
两个 url 仅延迟最后一个尺寸参数 (=s150-c
),该参数应将 thumbnail_url 中的图像裁剪为 150 像素,作为其最大尺寸。我可以通过参考官方文档here 来确认这一点。但是该参数根本不影响图像的大小。即使在添加参数之后,我仍然得到全尺寸图像。我已经尝试删除 -c
并尝试了各种尺寸。
我也尝试了一些来自 this list 的参数,不幸的是,这根本不会影响图像。
知道这种行为的原因是什么吗?
跟踪日志发现是本地没有安装PIL导致的。如果需要在本地服务器上进行转换,则需要安装 PIL。
我选择使用 pip install Pillow -t lib/
安装 Pillow,然后将以下内容添加到 app.yaml
libraries:
- name: PIL
version: "1.1.7"
然后在 lib
文件夹所在的项目根目录中添加一个 appengine_config.py
文件,并向其中添加以下代码。
# appengine_config.py
from google.appengine.ext import vendor
# Add any libraries install in the "lib" folder.
vendor.add('lib')
它开始神奇地发挥作用。
我正在使用 webApp2 和 Google App Engine 开发一个简单的应用程序,并使用 images
和 blobstore
api 使用 Google CDN 提供上传的图像。我正在使用以下代码为图像生成服务 Url -
from google.appengine.api import images
from google.appengine.ext import blobstore
def _get_urls_for(self, file_name):
user = users.get_current_user()
if user is None:
return
bucket_name = app_identity.get_default_gcs_bucket_name()
path = os.path.join('/', bucket_name, user.user_id(), file_name)
real_path = '/gs' + path
key = blobstore.create_gs_key(real_path)
url = images.get_serving_url(key, size=0)
thumbnail_url = images.get_serving_url(key, size=150, crop=True)
return url, thumbnail_url
它给我 url 如下(例如)-
http://localhost:8080/_ah/img/encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0LzE4NTgwNDc2NDIyMDEzOTEyNDExOC9pbWc4NzYuanBn=s32
和
http://localhost:8080/_ah/img/encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0LzE4NTgwNDc2NDIyMDEzOTEyNDExOC9pbWc4NzYuanBn=s150-c
两个 url 仅延迟最后一个尺寸参数 (=s150-c
),该参数应将 thumbnail_url 中的图像裁剪为 150 像素,作为其最大尺寸。我可以通过参考官方文档here 来确认这一点。但是该参数根本不影响图像的大小。即使在添加参数之后,我仍然得到全尺寸图像。我已经尝试删除 -c
并尝试了各种尺寸。
我也尝试了一些来自 this list 的参数,不幸的是,这根本不会影响图像。
知道这种行为的原因是什么吗?
跟踪日志发现是本地没有安装PIL导致的。如果需要在本地服务器上进行转换,则需要安装 PIL。
我选择使用 pip install Pillow -t lib/
安装 Pillow,然后将以下内容添加到 app.yaml
libraries:
- name: PIL
version: "1.1.7"
然后在 lib
文件夹所在的项目根目录中添加一个 appengine_config.py
文件,并向其中添加以下代码。
# appengine_config.py
from google.appengine.ext import vendor
# Add any libraries install in the "lib" folder.
vendor.add('lib')
它开始神奇地发挥作用。