fix: design 预处理 读取四通道图片背景变黑问题
All checks were successful
git commit AiDA python develop 分支构建部署 / scheduled_deploy (push) Has been skipped
All checks were successful
git commit AiDA python develop 分支构建部署 / scheduled_deploy (push) Has been skipped
This commit is contained in:
@@ -58,7 +58,21 @@ class DesignPreprocessing:
|
||||
if len(image.shape) == 2:
|
||||
image = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)
|
||||
elif image.shape[2] == 4: # 如果是四通道 mask
|
||||
image = image[:, :, :3]
|
||||
# 分离RGB和Alpha通道
|
||||
bgr = image[:, :, :3]
|
||||
alpha = image[:, :, 3]
|
||||
|
||||
# 创建白色背景(也可改为其他颜色,如(255,255,255)就是白色)
|
||||
background_color = (255, 255, 255)
|
||||
background = np.full_like(bgr, background_color)
|
||||
|
||||
# 将Alpha通道转换为掩码(0=透明,255=不透明)
|
||||
alpha_mask = alpha / 255.0 # 归一化到0-1
|
||||
alpha_mask = np.expand_dims(alpha_mask, axis=-1) # 扩展维度,方便广播计算
|
||||
|
||||
# 混合背景和原图:透明区域显示背景色,不透明区域显示原图
|
||||
image = (bgr * alpha_mask + background * (1 - alpha_mask)).astype(np.uint8)
|
||||
# 此时image已经是3通道RGB,无需再执行image = image[:, :, :3]
|
||||
obj["image_obj"] = image
|
||||
return image_list
|
||||
|
||||
@@ -174,8 +188,9 @@ class DesignPreprocessing:
|
||||
scale = 0.4
|
||||
if waist_width / scale >= image_width:
|
||||
add_width = int((waist_width / scale - image_width) / 2)
|
||||
ret = cv2.copyMakeBorder(image['obj'], 0, 0, add_width, add_width, cv2.BORDER_CONSTANT, value=(256, 256, 256))
|
||||
image_bytes = cv2.imencode(".jpg", ret)[1].tobytes()
|
||||
ret = cv2.copyMakeBorder(image['obj'], 0, 0, add_width, add_width, cv2.BORDER_CONSTANT, value=(255, 255, 255))
|
||||
img_rgba = cv2.cvtColor(ret, cv2.COLOR_RGB2RGBA)
|
||||
image_bytes = cv2.imencode(".png", img_rgba)[1].tobytes()
|
||||
# image['show_image_url'] = f"{image['image_url'].split('/', 1)[0]}/{self.minio_client.put_object(image['image_url'].split('/', 1)[0], image['image_url'].split('/', 1)[1].replace('.', '-show.'), io.BytesIO(image_bytes), len(image_bytes), content_type='image/jpeg').object_name}"
|
||||
bucket_name = image['image_url'].split('/', 1)[0]
|
||||
object_name = image['image_url'].split('/', 1)[1].replace('.', '-show.')
|
||||
|
||||
Reference in New Issue
Block a user