<s> from PIL import Image <EOL> CROP = <NUM_LIT:1> <EOL> FIT = <NUM_LIT:2> <EOL> FILL = <NUM_LIT:3> <EOL> PAD = <NUM_LIT:4> <EOL> class ImageScale ( object ) : <EOL> def __init__ ( self , path ) : <EOL> self . path = path <EOL> def adjust_size ( self , dst_x , dst_y , mode = FIT ) : <EOL> """<STR_LIT>""" <EOL> image = Image . open ( self . path ) <EOL> width , height = image . size <EOL> if mode == FIT : <EOL> return adjust_crop ( dst_x , dst_y , width , height ) <EOL> def adjust_crop ( dst_w , dst_h , img_w , img_h ) : <EOL> """<STR_LIT>""" <EOL> dst_w = float ( dst_w ) <EOL> dst_h = float ( dst_h ) <EOL> img_w = float ( img_w ) <EOL> img_h = float ( img_h ) <EOL> dst_ratio = float ( dst_w ) / dst_h <EOL> img_ratio = float ( img_w ) / img_h <EOL> if dst_ratio > img_ratio : <EOL> scale = dst_w / img_w <EOL> x = <NUM_LIT:0> <EOL> w = dst_w <EOL> h = img_h * scale <EOL> y = dst_h / <NUM_LIT:2> - h / <NUM_LIT:2> <EOL> elif dst_ratio <= img_ratio : <EOL> scale = dst_h / img_h <EOL> y = <NUM_LIT:0> <EOL> w = img_w * scale <EOL> h = img_h * scale <EOL> x = dst_w / <NUM_LIT:2> - w / <NUM_LIT:2> <EOL> return x , y , w , h <EOL> def adjust_pad ( dst_w , dst_h , img_w , img_h , amount = <NUM_LIT> ) : <EOL> x , y , w , h = adjust_fit ( dst_w * ( <NUM_LIT:1> - <NUM_LIT:2> * amount ) , dst_h * ( <NUM_LIT:1> - <NUM_LIT:2> * amount ) , img_w , img_h ) <EOL> x = x + dst_w * amount <EOL> y = y + dst_h * amount <EOL> return x , y , w , h <EOL> def adjust_fit ( dst_w , dst_h , img_w , img_h ) : <EOL> """<STR_LIT>""" <EOL> dst_w = float ( dst_w ) <EOL> dst_h = float ( dst_h ) <EOL> img_w = float ( img_w ) <EOL> img_h = float ( img_h ) <EOL> dst_ratio = float ( dst_w ) / dst_h <EOL> img_ratio = float ( img_w ) / img_h <EOL> if dst_ratio > img_ratio : <EOL> y = <NUM_LIT:0> <EOL> h = dst_h <EOL> w = h * img_ratio <EOL> x = dst_w / <NUM_LIT:2> - w / <NUM_LIT:2> <EOL> else : <EOL> scale = dst_h / img_h <EOL> x = <NUM_LIT:0> <EOL> w = dst_w <EOL> h = w / img_ratio <EOL> y = dst_h / <NUM_LIT:2> - h / <NUM_LIT:2> <EOL> return x , y , w , h <EOL> def adjust_fill ( dst_w , dst_h , img_w , img_h ) : <EOL> return <NUM_LIT:0> , <NUM_LIT:0> , dst_w , dst_h <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> import doctest <EOL> doctest . testmod ( ) </s>
