English | Site Directory

Images Python API Overview

App Engine provides the ability to manipulate image data using a dedicated Images service. The Images service can resize, rotate, flip, and crop images; it can composite multiple images into a single image; and it can convert image data between several formats. It can also enhance photographs using an predefined algorithm. The API can also provide information about an image, such as its format, width, height, and a histogram of color values.

Transforming Images in Python

The following example loads image data from the datastore, then uses the Images service to resize it and return it to the browser as a JPEG image.

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

    # Either "id" wasn't provided, or there was no image with that ID
    # in the datastore.
    self.error(404)

Note: In order to use the Images API in your local environment you must first download and install PIL, the Python Imaging Library. PIL is not available on App Engine; it is only used as a stub for the Images API in your local environment. Only the transforms provided in the images API are available on App Engine.

Available Image Transformations

The Images service can resize, rotate, flip, and crop images, and enhance photographs. It can also composite multiple images into a single image.

Resize

You can resize the image while maintaining the same aspect ratio.

  

Rotate

You can rotate the image in 90 degree increments.

  

Flip Horizontally

You can flip the image horizontally.

  

Flip Vertically

You can flip the image vertically.

  

Crop

You can crop the image with a given bounding box.

  

I'm Feeling Lucky

The "I'm Feeling Lucky" transform enhances dark and bright colors in an image and adjusts both color and contrast to optimal levels.

  

Image Formats

The service accepts image data in the JPEG, PNG, GIF (including animated GIF), BMP, TIFF and ICO formats.

It can return transformed images in the JPEG and PNG formats. If the input format and the output format are different, the service converts the input data to the output format before performing the transformation.

Images and the Development Server

The development server uses your local machine to perform the capabilities of the Images service.

The Python development server uses the Python Imaging Library (PIL) to simulate the Image service. This library is not included with the Python standard library or the SDK, and must be installed separately. See Installing PIL.

Quotas and Limits

Each Images service request counts toward the Image Manipulation API Calls quota. An app can perform multiple transformations of an image in a single API call.

Data sent to the Images service counts toward the Data Sent to (Images) API quota. Data received from the Images service counts toward the Data Received from (Images) API quota.

Each transformation of an image counts toward the Transformations Executed quota.

For more information on quotas, see Quotas, and the "Quota Details" section of the Admin Console.

In addition to quotas, the following limits apply to the use of the Images service:

Limit Amount
maximum data size of image sent to service 1 megabyte
maximum data size of image received from service 1 megabyte