Несмотря на документацию, Я тоже немного растерялся .
Теперь, когда я понимаю это лучше (я думаю!), Я приведу пример.
get_serving_url()
находится в классе google.appengine.ext.blobstore
, а принимает один позиционный аргумент , BlobKey
.
A BlobKey
может быть построен из строки: blobstore.BlobKey('this is the key')
.
Итак, это дает нам все необходимое для базовой реализации get_serving_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)
Пока все отлично и прекрасно.
Функция такжепринимает три ключевых аргумента, как задокументировано .Это size
, crop
, secure_url
и rpc
.
secure_url = True
просто возвращает https
url вместо http
(по умолчанию False
) rpc
- это объект RPC
с некоторыми настройками для асинхронной обработки.Я не понимаю этого достаточно, чтобы объяснить или даже использовать это сам! crop = True
обрезает квадрат изображения четными пропорциями.
size
- вот что смутилоя сначала. не не генерирует разные URL как таковые.Единственное отличие заключается в суффиксе =sXX
, который вы можете установить самостоятельно.
Лично я сохраняю URL оригинального размера в моем db.Model
, а затем выполняю imgUrl+'=s150'
(например) везде, где это возможно.используемый.Нет необходимости вызывать get_serving_url()
для каждого нужного вам размера, никакого снижения производительности, потому что он делает то же самое.
Обратите также внимание, что указанный размер является наибольшим размером изображения.Любопытно, что это скрыто в документах - я предположил, что на какое-то время это должна быть ширина, но если изображение «портретное», конечно, это высота.
Вы также можете добавить -c
(эквивалентноcrop=True
).
Итак, для нашего более полного (хотя мне не хватает знаний, чтобы продемонстрировать использование RPC
объекта), пример:
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)
Эти URL могут быть сохраненыв хранилище данных в любой модели, к которой они имеют отношение.Это предпочтительнее, чем использование совершенно другого db.BlobProperty
, что совсем не для изображений.Это также более дорого и менее эффективно.
Конечно, я бы посоветовал вам хранить только url
(как указано выше), потому что изменить размер очень просто, добавив суффикс строки!На самом деле, это то, что вы можете просто сделать в своем шаблоне Jinja (или эквивалентном), где вы, вероятно, в противном случае задали бы width=
и обрезали бы, делая то же самое в CSS.