init python: whitespace_dict = {} with renpy.file("images.whitespace") as fp: line = fp.readline() while line: path, area = line.strip("\r\n").split(':') whitespace_dict[path] = map(int, area.split(',')) line = fp.readline() def crop_whitespace(path): # Return box from whitespace_dict, or calculate and store it if path in whitespace_dict: box = whitespace_dict[path] else: surf = Image(path).load() box = tuple(surf.get_bounding_rect()) whitespace_dict[path] = box return box def crop_image_zoom(path, xsize, ysize, grayscale=False): x, y, w, h = crop_whitespace(path) matrix = SaturationMatrix(0) if grayscale else None sprite = Image(path) return Transform(sprite, crop=(x, y, w, h), xsize=xsize, ysize=ysize, fit="contain", matrixcolor=matrix, subpixel=True) def get_zoom(image, size): if isinstance(image, basestring): image = Image(image) r = renpy.render(image, 800, 800, 0, 0) x, y = r.get_size() xsize, ysize = size return min(ysize / y, xsize / x)