def place_text(self, text_arrs, back_arr, bbs):
areas = [-np.prod(ta.shape) for ta in text_arrs]
order = np.argsort(areas)
locs = [None for i in range(len(text_arrs))]
out_arr = np.zeros_like(back_arr)
for i in order:
ba = np.clip(back_arr.copy().astype(np.float), 0, 255)
ta = np.clip(text_arrs[i].copy().astype(np.float), 0, 255)
ba[ba > 127] = 1e8
intersect = ssig.fftconvolve(ba,ta[::-1,::-1],mode='valid')
safemask = intersect < 1e8
if not np.any(safemask): # no collision-free position:
#warn("COLLISION!!!")
return back_arr,locs[:i],bbs[:i],order[:i]
minloc = np.transpose(np.nonzero(safemask))
loc = minloc[np.random.choice(minloc.shape[0]),:]
locs[i] = loc
# update the bounding-boxes:
bbs[i] = move_bb(bbs[i],loc[::-1])
# blit the text onto the canvas
w,h = text_arrs[i].shape
out_arr[loc[0]:loc[0]+w,loc[1]:loc[1]+h] += text_arrs[i]
return out_arr, locs, bbs, order
评论列表
文章目录