'Crop the image.
The four arguments are the scaling numbers to describe the bounding box
which will crop the image.  The upper left point of the bounding box will
be at (left_x*image_width, top_y*image_height) the lower right point will
be at (right_x*image_width, bottom_y*image_height).
Args:
left_x: float value between 0.0 and 1.0 (inclusive).
top_y: float value between 0.0 and 1.0 (inclusive).
right_x: float value between 0.0 and 1.0 (inclusive).
bottom_y: float value between 0.0 and 1.0 (inclusive).
Raises:
TypeError if the args are not of type \'float\'.
BadRequestError when there is something wrong with the given bounding box
or if MAX_TRANSFORMS_PER_REQUEST transforms have already been requested
for this image.'

def crop(self, left_x, top_y, right_x, bottom_y):

    self._validate_crop_arg(left_x, 'left_x')
    self._validate_crop_arg(top_y, 'top_y')
    self._validate_crop_arg(right_x, 'right_x')
    self._validate_crop_arg(bottom_y, 'bottom_y')
    if (left_x >= right_x):
        raise BadRequestError('left_x    must    be    less    than    right_x')
    if (top_y >= bottom_y):
        raise BadRequestError('top_y    must    be    less    than    bottom_y')
    self._check_transform_limits()
    transform = images_service_pb.Transform()
    transform.set_crop_left_x(left_x)
    transform.set_crop_top_y(top_y)
    transform.set_crop_right_x(right_x)
    transform.set_crop_bottom_y(bottom_y)
    self._transforms.append(transform)
