in src/google/appengine/api/images/images_stub.py [0:0]
def _ProcessTransforms(self, image, transforms, correct_orientation):
"""Execute PIL operations based on transform values.
Args:
image: PIL.Image.Image instance, image to manipulate.
transforms: list of ImagesTransformRequest.Transform objects.
correct_orientation: True to indicate that image orientation should be
corrected based on its EXIF.
Returns:
PIL.Image.Image with transforms performed on it.
Raises:
ApplicationError: More than one of the same type of transform was present.
"""
new_image = image
if len(transforms) > images.MAX_TRANSFORMS_PER_REQUEST:
raise apiproxy_errors.ApplicationError(
images_service_pb2.ImagesServiceError.BAD_TRANSFORM_DATA)
orientation = 1
if correct_orientation:
exif = self._GetExifFromImage(image)
if not exif or _EXIF_ORIENTATION_TAG not in exif:
correct_orientation = False
else:
orientation = exif[_EXIF_ORIENTATION_TAG]
width, height = new_image.size
if height > width:
orientation = 1
for transform in transforms:
if (correct_orientation and not (transform.HasField('crop_left_x') or
transform.HasField('crop_top_y') or
transform.HasField('crop_right_x') or
transform.HasField('crop_bottom_y')) and
not transform.HasField('horizontal_flip') and
not transform.HasField('vertical_flip')):
new_image = self._CorrectOrientation(new_image, orientation)
correct_orientation = False
if transform.HasField('width') or transform.HasField('height'):
new_image = self._Resize(new_image, transform)
elif transform.HasField('rotate'):
new_image = self._Rotate(new_image, transform)
elif transform.HasField('horizontal_flip'):
new_image = new_image.transpose(Image.FLIP_LEFT_RIGHT)
elif transform.HasField('vertical_flip'):
new_image = new_image.transpose(Image.FLIP_TOP_BOTTOM)
elif (transform.HasField('crop_left_x') or
transform.HasField('crop_top_y') or
transform.HasField('crop_right_x') or
transform.HasField('crop_bottom_y')):
new_image = self._Crop(new_image, transform)
elif transform.HasField('autolevels'):
logging.info('I\'m Feeling Lucky autolevels will be visible once this '
'application is deployed.')
else:
logging.warning('Found no transformations found to perform.')
if correct_orientation:
new_image = self._CorrectOrientation(new_image, orientation)
correct_orientation = False
return new_image