init python: whitespace_dict = {} with renpy.open_file("images.whitespace") as fp: line = fp.readline() while line: path, area = line.strip("\r\n").split(':') whitespace_dict[path] = list(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: if isinstance(path, str): surf = Image(path).load() elif isinstance(path, im.Image): surf = path.load() elif isinstance(path, Transform): surf = path.child.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, str): 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)