Платформа App Engine позволяет приложениям использовать сервис обработки изображений подобный масштабируемой инфраструктуре проекта Веб-альбомы Picasa. С помощью этого интерфейса вы можете изменять размеры, поворачивать, обрезать, вращать, переворачивать изображения форматов JPEG, PNG, GIF (включая анимированные), BMP, TIFF и ICO и производить операцию автоматической корректировки контраста для фотографий.
Преобразования изображений могут быть выполнены для получения их уменьшенных копий и реализации других функций современных приложений.
Список доступных преобразований:
Изменить размер изображения с сохранением пропорций. Если заданы оба параметра ширины и высоты, будет использован наименьший из этих двух значений.
Повернуть изображение на заданное число градусов по часовой стрелке.
Перевернуть изображение по горизонтали.
Перевернуть изображение по вертикали.
Обрезает изображение по координатам, переданным функции.
Волшебная операция "I'm Feeling Lucky" выполняет улучшение баланса цветности изображения и приводит его к оптимальным уровням.
Примечание: Чтобы использовать интерфейс Images API на локальном компьютере разработчика необходимо сначала скачать и установить PIL, библиотеку обработки изображений языка Python. Сама библиотека PIL недоступна на платформе App Engine; она используется только как промежуточный слой в среде разработки. Приложениям App Engine доступны только те операции по работе с изображениями, которые реализованы в Images API.
from google.appengine.api import images
from google.appengine.ext import db
from google.appengine.ext import webapp
class Photo(db.Model):
title = db.StringProperty()
full_size_image = db.BlobProperty()
class Thumbnailer(webapp.RequestHandler):
def get(self):
if self.request.get("id"):
photo = Photo.get_by_id(self.request.get("id"))
if photo:
img = images.Image(photo.full_size_image)
img.resize(width=80, height=100)
img.im_feeling_lucky()
thumbnail = img.execute_transforms(output_encoding=images.JPEG)
self.response.headers['Content-Type'] = 'image/jpeg'
self.response.out.write(thumbnail)
return
# Либо не указан идентификатор изображения, либо оно не было найдено
# в хранилище.
self.error(404)