Spaces:
Sleeping
Sleeping
| """Crop geometry for the zoom. Pure PIL, no model code, so it stays cheap to test.""" | |
| from PIL import Image | |
| PROCESS_SIZE = 512 | |
| def resize_and_center_crop(img, size=PROCESS_SIZE): | |
| """CoZ's entry crop: shortest side to `size`, then the centre square.""" | |
| w, h = img.size | |
| scale = size / min(w, h) | |
| nw, nh = int(w * scale), int(h * scale) | |
| img = img.resize((nw, nh), Image.LANCZOS) | |
| left, top = (nw - size) // 2, (nh - size) // 2 | |
| return img.crop((left, top, left + size, top + size)) | |
| def window_rect(size, upscale, center=(0.5, 0.5)): | |
| """The next level's field of view: a 1/upscale square around `center`, clamped inside.""" | |
| w, h = size | |
| nw, nh = w // upscale, h // upscale | |
| left = min(max(int(center[0] * w - nw / 2), 0), w - nw) | |
| top = min(max(int(center[1] * h - nh / 2), 0), h - nh) | |
| return left, top, left + nw, top + nh | |
| def zoom_window(img, upscale, center=(0.5, 0.5)): | |
| return img.crop(window_rect(img.size, upscale, center)) | |
| def nested_rects(size, levels, upscale=4, center=(0.5, 0.5)): | |
| """Where each zoom step lands, in the coordinates of the first canvas.""" | |
| rects, rect = [], (0, 0, size[0], size[1]) | |
| for _ in range(levels): | |
| side = rect[2] - rect[0] | |
| l, t, r, b = window_rect((side, side), upscale, center) | |
| rect = (rect[0] + l, rect[1] + t, rect[0] + r, rect[1] + b) | |
| rects.append(rect) | |
| return rects | |