Spaces:
Running
on
Zero
Running
on
Zero
| from PIL import Image | |
| from typing import Tuple | |
| import trimesh | |
| import numpy as np | |
| def load_mesh(path): | |
| mesh = trimesh.load_mesh(path, force='mesh') | |
| if isinstance(mesh, trimesh.Scene): | |
| mesh = trimesh.util.concatenate(mesh.dump()) | |
| return mesh | |
| def paste_image(A: Image.Image, B: Image.Image, h: int, w: int) -> Image.Image: | |
| A = A.convert("RGBA") | |
| B = B.convert("RGBA") # Ensure B has an alpha channel | |
| A_width, A_height = A.size | |
| B_width, B_height = B.size | |
| # Crop A if h or w are negative | |
| crop_left = max(0, -w) | |
| crop_top = max(0, -h) | |
| A_cropped = A.crop((crop_left, crop_top, A_width, A_height)) | |
| # Adjust destination position on B | |
| paste_x = max(0, w) | |
| paste_y = max(0, h) | |
| # Ensure A_cropped fits within B bounds | |
| max_w = B_width - paste_x | |
| max_h = B_height - paste_y | |
| A_cropped = A_cropped.crop((0, 0, min(A_cropped.width, max_w), min(A_cropped.height, max_h))) | |
| # Use alpha channel of A as mask | |
| alpha = A_cropped.split()[-1] | |
| B.paste(A_cropped, (paste_x - 2, paste_y - 2), mask=alpha) | |
| return B |