Spaces:
Running
Running
import numpy as np | |
from PIL import Image | |
def get_bbox_from_alpha(rgba: Image.Image): | |
arr = np.array(rgba) | |
alpha = arr[...,3] | |
ys, xs = np.where(alpha>0) | |
if ys.size == 0: | |
return None | |
x1, x2 = xs.min(), xs.max() | |
y1, y2 = ys.min(), ys.max() | |
return x1, y1, x2, y2 | |
def paste_with_alpha(bg: np.ndarray, src: np.ndarray, offset: tuple[int,int]) -> Image.Image: | |
res = bg.copy() | |
x, y = offset | |
h, w = src.shape[:2] | |
x1, y1 = max(x,0), max(y,0) | |
x2 = min(x+w, bg.shape[1]) | |
y2 = min(y+h, bg.shape[0]) | |
if x1>=x2 or y1>=y2: | |
return Image.fromarray(res) | |
cs = src[y1-y:y2-y, x1-x:x2-x] | |
cd = res[y1:y2, x1:x2] | |
mask = cs[...,3]>0 | |
if cd.shape[2]==3: | |
cd[mask] = cs[mask][..., :3] | |
else: | |
cd[mask] = cs[mask] | |
res[y1:y2, x1:x2] = cd | |
return Image.fromarray(res) | |