This serves as a really basic example of a thumbnailing method. You
        may want to implement your own logic, but this will work for
        simple cases.

        :param Image image: This is your engine's ``Image`` object. For
            PIL it's PIL.Image.
        :param tuple geometry: Geometry of the image in the format of (x,y).
        :keyword str crop: A cropping offset string. This is either one or two
            space-separated values. If only one value is specified, the cropping
            amount (pixels or percentage) for both X and Y dimensions is the
            amount given. If two values are specified, X and Y dimension cropping
            may be set independently. Some examples: '50% 50%', '50px 20px',
            '50%', '50px'.
        :keyword str colorspace: The colorspace to set/convert the image to.
            This is typically 'RGB' or 'GRAY'.
        :returns: The thumbnailed image. The returned type depends on your
            choice of Engine.

def create_thumbnail(self, image, geometry,
                         upscale=True, crop=None, colorspace='RGB'):
        """
        This serves as a really basic example of a thumbnailing method. You
        may want to implement your own logic, but this will work for
        simple cases.

        :param Image image: This is your engine's ``Image`` object. For
            PIL it's PIL.Image.
        :param tuple geometry: Geometry of the image in the format of (x,y).
        :keyword str crop: A cropping offset string. This is either one or two
            space-separated values. If only one value is specified, the cropping
            amount (pixels or percentage) for both X and Y dimensions is the
            amount given. If two values are specified, X and Y dimension cropping
            may be set independently. Some examples: '50% 50%', '50px 20px',
            '50%', '50px'.
        :keyword str colorspace: The colorspace to set/convert the image to.
            This is typically 'RGB' or 'GRAY'.
        :returns: The thumbnailed image. The returned type depends on your
            choice of Engine.
        """
        image = self.colorspace(image, colorspace)
        image = self.scale(image, geometry, upscale, crop)
        image = self.crop(image, geometry, crop)

        return image