syntax = "proto2"; option go_package = "image"; package appengine; message ImagesServiceError { enum ErrorCode { UNSPECIFIED_ERROR = 1; BAD_TRANSFORM_DATA = 2; NOT_IMAGE = 3; BAD_IMAGE_DATA = 4; IMAGE_TOO_LARGE = 5; INVALID_BLOB_KEY = 6; ACCESS_DENIED = 7; OBJECT_NOT_FOUND = 8; } } message ImagesServiceTransform { enum Type { RESIZE = 1; ROTATE = 2; HORIZONTAL_FLIP = 3; VERTICAL_FLIP = 4; CROP = 5; IM_FEELING_LUCKY = 6; } } message Transform { optional int32 width = 1; optional int32 height = 2; optional bool crop_to_fit = 11 [default = false]; optional float crop_offset_x = 12 [default = 0.5]; optional float crop_offset_y = 13 [default = 0.5]; optional int32 rotate = 3 [default = 0]; optional bool horizontal_flip = 4 [default = false]; optional bool vertical_flip = 5 [default = false]; optional float crop_left_x = 6 [default = 0.0]; optional float crop_top_y = 7 [default = 0.0]; optional float crop_right_x = 8 [default = 1.0]; optional float crop_bottom_y = 9 [default = 1.0]; optional bool autolevels = 10 [default = false]; optional bool allow_stretch = 14 [default = false]; } message ImageData { required bytes content = 1 [ctype=CORD]; optional string blob_key = 2; optional int32 width = 3; optional int32 height = 4; } message InputSettings { enum ORIENTATION_CORRECTION_TYPE { UNCHANGED_ORIENTATION = 0; CORRECT_ORIENTATION = 1; } optional ORIENTATION_CORRECTION_TYPE correct_exif_orientation = 1 [default=UNCHANGED_ORIENTATION]; optional bool parse_metadata = 2 [default=false]; optional int32 transparent_substitution_rgb = 3; } message OutputSettings { enum MIME_TYPE { PNG = 0; JPEG = 1; WEBP = 2; } optional MIME_TYPE mime_type = 1 [default=PNG]; optional int32 quality = 2; } message ImagesTransformRequest { required ImageData image = 1; repeated Transform transform = 2; required OutputSettings output = 3; optional InputSettings input = 4; } message ImagesTransformResponse { required ImageData image = 1; optional string source_metadata = 2; } message CompositeImageOptions { required int32 source_index = 1; required int32 x_offset = 2; required int32 y_offset = 3; required float opacity = 4; enum ANCHOR { TOP_LEFT = 0; TOP = 1; TOP_RIGHT = 2; LEFT = 3; CENTER = 4; RIGHT = 5; BOTTOM_LEFT = 6; BOTTOM = 7; BOTTOM_RIGHT = 8; } required ANCHOR anchor = 5; } message ImagesCanvas { required int32 width = 1; required int32 height = 2; required OutputSettings output = 3; optional int32 color = 4 [default=-1]; } message ImagesCompositeRequest { repeated ImageData image = 1; repeated CompositeImageOptions options = 2; required ImagesCanvas canvas = 3; } message ImagesCompositeResponse { required ImageData image = 1; } message ImagesHistogramRequest { required ImageData image = 1; } message ImagesHistogram { repeated int32 red = 1; repeated int32 green = 2; repeated int32 blue = 3; } message ImagesHistogramResponse { required ImagesHistogram histogram = 1; } message ImagesGetUrlBaseRequest { required string blob_key = 1; optional bool create_secure_url = 2 [default = false]; } message ImagesGetUrlBaseResponse { required string url = 1; } message ImagesDeleteUrlBaseRequest { required string blob_key = 1; } message ImagesDeleteUrlBaseResponse { }