feat(新功能):
fix(修复bug): sketch图层拉伸后 print 比例位置不正常问题 docs(文档变更): refactor(重构): test(增加测试):
This commit is contained in:
@@ -33,7 +33,6 @@ class PrintPainting:
|
|||||||
result['mask'] = cv2.resize(result['mask'], (new_width, new_height))
|
result['mask'] = cv2.resize(result['mask'], (new_width, new_height))
|
||||||
result['gray'] = cv2.resize(result['gray'], (new_width, new_height))
|
result['gray'] = cv2.resize(result['gray'], (new_width, new_height))
|
||||||
|
|
||||||
print(1)
|
|
||||||
if overall_print['print_path_list']:
|
if overall_print['print_path_list']:
|
||||||
painting_dict = {'dim_image_h': result['pattern_image'].shape[0], 'dim_image_w': result['pattern_image'].shape[1]}
|
painting_dict = {'dim_image_h': result['pattern_image'].shape[0], 'dim_image_w': result['pattern_image'].shape[1]}
|
||||||
result['print_image'] = result['pattern_image']
|
result['print_image'] = result['pattern_image']
|
||||||
@@ -56,88 +55,88 @@ class PrintPainting:
|
|||||||
for i in range(len(single_print['print_path_list'])):
|
for i in range(len(single_print['print_path_list'])):
|
||||||
image, image_mode = self.read_image(single_print['print_path_list'][i])
|
image, image_mode = self.read_image(single_print['print_path_list'][i])
|
||||||
|
|
||||||
if image_mode == "RGB":
|
if image_mode == "RGBA":
|
||||||
image_rgba = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA)
|
# image_rgba = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA)
|
||||||
image = Image.fromarray(image_rgba)
|
# image = Image.fromarray(image_rgba)
|
||||||
|
|
||||||
new_size = (int(result['pattern_image'].shape[1] * single_print['print_scale_list'][i][0]), int(result['pattern_image'].shape[0] * single_print['print_scale_list'][i][1]))
|
new_size = (int(result['pattern_image'].shape[1] * single_print['print_scale_list'][i][0]), int(result['pattern_image'].shape[0] * single_print['print_scale_list'][i][1]))
|
||||||
mask = image.split()[3]
|
mask = image.split()[3]
|
||||||
resized_source = image.resize(new_size)
|
resized_source = image.resize(new_size)
|
||||||
resized_source_mask = mask.resize(new_size)
|
resized_source_mask = mask.resize(new_size)
|
||||||
rotated_resized_source = resized_source.rotate(-single_print['print_angle_list'][i])
|
rotated_resized_source = resized_source.rotate(-single_print['print_angle_list'][i])
|
||||||
rotated_resized_source_mask = resized_source_mask.rotate(-single_print['print_angle_list'][i])
|
rotated_resized_source_mask = resized_source_mask.rotate(-single_print['print_angle_list'][i])
|
||||||
source_image_pil = Image.fromarray(cv2.cvtColor(print_background, cv2.COLOR_BGR2RGB))
|
source_image_pil = Image.fromarray(cv2.cvtColor(print_background, cv2.COLOR_BGR2RGB))
|
||||||
source_image_pil_mask = Image.fromarray(cv2.cvtColor(mask_background, cv2.COLOR_BGR2RGB))
|
source_image_pil_mask = Image.fromarray(cv2.cvtColor(mask_background, cv2.COLOR_BGR2RGB))
|
||||||
source_image_pil.paste(rotated_resized_source, (int(single_print['location'][i][0]), int(single_print['location'][i][1])), rotated_resized_source)
|
source_image_pil.paste(rotated_resized_source, (int(single_print['location'][i][0]), int(single_print['location'][i][1])), rotated_resized_source)
|
||||||
source_image_pil_mask.paste(rotated_resized_source_mask, (int(single_print['location'][i][0]), int(single_print['location'][i][1])), rotated_resized_source_mask)
|
source_image_pil_mask.paste(rotated_resized_source_mask, (int(single_print['location'][i][0]), int(single_print['location'][i][1])), rotated_resized_source_mask)
|
||||||
print_background = cv2.cvtColor(np.array(source_image_pil), cv2.COLOR_RGBA2BGR)
|
print_background = cv2.cvtColor(np.array(source_image_pil), cv2.COLOR_RGBA2BGR)
|
||||||
mask_background = cv2.cvtColor(np.array(source_image_pil_mask), cv2.COLOR_RGBA2BGR)
|
mask_background = cv2.cvtColor(np.array(source_image_pil_mask), cv2.COLOR_RGBA2BGR)
|
||||||
ret, mask_background = cv2.threshold(mask_background, 124, 255, cv2.THRESH_BINARY)
|
ret, mask_background = cv2.threshold(mask_background, 124, 255, cv2.THRESH_BINARY)
|
||||||
# else:
|
else:
|
||||||
# mask = self.get_mask_inv(image)
|
mask = self.get_mask_inv(image)
|
||||||
# mask = np.expand_dims(mask, axis=2)
|
mask = np.expand_dims(mask, axis=2)
|
||||||
# mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
|
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
|
||||||
# mask = cv2.bitwise_not(mask)
|
mask = cv2.bitwise_not(mask)
|
||||||
#
|
|
||||||
# mask = cv2.resize(mask, (int(result['final_image'].shape[1] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[0] * single_print['print_scale_list'][i][1])))
|
mask = cv2.resize(mask, (int(result['final_image'].shape[1] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[0] * single_print['print_scale_list'][i][1])))
|
||||||
# image = cv2.resize(image, (int(result['final_image'].shape[1] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[0] * single_print['print_scale_list'][i][1])))
|
image = cv2.resize(image, (int(result['final_image'].shape[1] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[0] * single_print['print_scale_list'][i][1])))
|
||||||
# # 旋转后的坐标需要重新算
|
# 旋转后的坐标需要重新算
|
||||||
# rotate_mask, _ = self.img_rotate(mask, single_print['print_angle_list'][i])
|
rotate_mask, _ = self.img_rotate(mask, single_print['print_angle_list'][i])
|
||||||
# rotate_image, rotated_new_size = self.img_rotate(image, single_print['print_angle_list'][i])
|
rotate_image, rotated_new_size = self.img_rotate(image, single_print['print_angle_list'][i])
|
||||||
# # x, y = int(result['print']['location'][i][0] - rotated_new_size[0] - (rotate_mask.shape[0] - image.shape[0]) / 2), int(result['print']['location'][i][1] - rotated_new_size[1] - (rotate_mask.shape[1] - image.shape[1]) / 2)
|
# x, y = int(result['print']['location'][i][0] - rotated_new_size[0] - (rotate_mask.shape[0] - image.shape[0]) / 2), int(result['print']['location'][i][1] - rotated_new_size[1] - (rotate_mask.shape[1] - image.shape[1]) / 2)
|
||||||
# x, y = int(single_print['location'][i][0] - rotated_new_size[0]), int(single_print['location'][i][1] - rotated_new_size[1])
|
x, y = int(single_print['location'][i][0] - rotated_new_size[0]), int(single_print['location'][i][1] - rotated_new_size[1])
|
||||||
#
|
|
||||||
# image_x = print_background.shape[1] # 底图宽
|
image_x = print_background.shape[1] # 底图宽
|
||||||
# image_y = print_background.shape[0] # 底图高
|
image_y = print_background.shape[0] # 底图高
|
||||||
# print_x = rotate_image.shape[1] #印花宽
|
print_x = rotate_image.shape[1] #印花宽
|
||||||
# print_y = rotate_image.shape[0] #印花高
|
print_y = rotate_image.shape[0] #印花高
|
||||||
#
|
|
||||||
# # 有bug
|
# 有bug
|
||||||
# # if x + print_x > image_x:
|
# if x + print_x > image_x:
|
||||||
# # rotate_image = rotate_image[:, :x + print_x - image_x]
|
# rotate_image = rotate_image[:, :x + print_x - image_x]
|
||||||
# # rotate_mask = rotate_mask[:, :x + print_x - image_x]
|
# rotate_mask = rotate_mask[:, :x + print_x - image_x]
|
||||||
# # #
|
# #
|
||||||
# # if y + print_y > image_y:
|
# if y + print_y > image_y:
|
||||||
# # rotate_image = rotate_image[:y + print_y - image_y]
|
# rotate_image = rotate_image[:y + print_y - image_y]
|
||||||
# # rotate_mask = rotate_mask[:y + print_y - image_y]
|
# rotate_mask = rotate_mask[:y + print_y - image_y]
|
||||||
#
|
|
||||||
# # 不能是并行
|
# 不能是并行
|
||||||
# # 当前第一轮的if (108以及115)是判断有没有过下界和右界。第二轮的是判断左上有没有超出。 如果这个样子的话,先裁了右边,再左移,region就会有问题
|
# 当前第一轮的if (108以及115)是判断有没有过下界和右界。第二轮的是判断左上有没有超出。 如果这个样子的话,先裁了右边,再左移,region就会有问题
|
||||||
# # 先挪 再判断 最后裁剪
|
# 先挪 再判断 最后裁剪
|
||||||
#
|
|
||||||
# # 如果print旋转了 或者 print贴边了 则需要判断 判断左界和上界是否小于0
|
# 如果print旋转了 或者 print贴边了 则需要判断 判断左界和上界是否小于0
|
||||||
# if x <= 0: # 如果X轴偏移量小于0,说明印花需要被裁剪至合适大小 或当X轴偏移量大于印花宽度时,裁剪后的印花宽度为0
|
if x <= 0: # 如果X轴偏移量小于0,说明印花需要被裁剪至合适大小 或当X轴偏移量大于印花宽度时,裁剪后的印花宽度为0
|
||||||
# rotate_image = rotate_image[:, -x:]
|
rotate_image = rotate_image[:, abs(x):]
|
||||||
# rotate_mask = rotate_mask[:, -x:]
|
rotate_mask = rotate_mask[:, abs(x):]
|
||||||
# start_x = x = 0
|
start_x = x = 0
|
||||||
# else:
|
else:
|
||||||
# start_x = x
|
start_x = x
|
||||||
#
|
|
||||||
# if y <= 0:
|
if y >= 0: # 如果X轴偏移量大于0,说明印花需要被裁剪至合适大小 或当Y轴偏移量大于印花宽度时,裁剪后的印花宽度为0
|
||||||
# rotate_image = rotate_image[-y:, :]
|
rotate_image = rotate_image[y:, :]
|
||||||
# rotate_mask = rotate_mask[-y:, :]
|
rotate_mask = rotate_mask[y:, :]
|
||||||
# start_y = y = 0
|
start_y = y = 0
|
||||||
# else:
|
else:
|
||||||
# start_y = y
|
start_y = y
|
||||||
#
|
|
||||||
# # ------------------
|
# ------------------
|
||||||
# # 如果print-size大于image-size 则需要裁剪print
|
# 如果print-size大于image-size 则需要裁剪print
|
||||||
#
|
|
||||||
# if x + print_x > image_x:
|
if x + print_x > image_x:
|
||||||
# rotate_image = rotate_image[:, :image_x - x]
|
rotate_image = rotate_image[:, :image_x - x]
|
||||||
# rotate_mask = rotate_mask[:, :image_x - x]
|
rotate_mask = rotate_mask[:, :image_x - x]
|
||||||
#
|
|
||||||
# if y + print_y > image_y:
|
if y + print_y > image_y:
|
||||||
# rotate_image = rotate_image[:image_y - y, :]
|
rotate_image = rotate_image[:image_y - y, :]
|
||||||
# rotate_mask = rotate_mask[:image_y - y, :]
|
rotate_mask = rotate_mask[:image_y - y, :]
|
||||||
#
|
|
||||||
# # mask_background[start_y:y + rotate_mask.shape[0], start_x:x + rotate_mask.shape[1]] = cv2.bitwise_xor(mask_background[start_y:y + rotate_mask.shape[0], start_x:x + rotate_mask.shape[1]], rotate_mask)
|
# mask_background[start_y:y + rotate_mask.shape[0], start_x:x + rotate_mask.shape[1]] = cv2.bitwise_xor(mask_background[start_y:y + rotate_mask.shape[0], start_x:x + rotate_mask.shape[1]], rotate_mask)
|
||||||
# # print_background[start_y:y + rotate_image.shape[0], start_x:x + rotate_image.shape[1]] = cv2.add(print_background[start_y:y + rotate_image.shape[0], start_x:x + rotate_image.shape[1]], rotate_image)
|
# print_background[start_y:y + rotate_image.shape[0], start_x:x + rotate_image.shape[1]] = cv2.add(print_background[start_y:y + rotate_image.shape[0], start_x:x + rotate_image.shape[1]], rotate_image)
|
||||||
#
|
|
||||||
# # mask_background[start_y:y + rotate_mask.shape[0], start_x:x + rotate_mask.shape[1]] = rotate_mask
|
# mask_background[start_y:y + rotate_mask.shape[0], start_x:x + rotate_mask.shape[1]] = rotate_mask
|
||||||
# # print_background[start_y:y + rotate_image.shape[0], start_x:x + rotate_image.shape[1]] = rotate_image
|
# print_background[start_y:y + rotate_image.shape[0], start_x:x + rotate_image.shape[1]] = rotate_image
|
||||||
# mask_background = self.stack_prin(mask_background, result['pattern_image'], rotate_mask, start_y, y, start_x, x)
|
mask_background = self.stack_prin(mask_background, result['pattern_image'], rotate_mask, start_y, y, start_x, x)
|
||||||
# print_background = self.stack_prin(print_background, result['pattern_image'], rotate_image, start_y, y, start_x, x)
|
print_background = self.stack_prin(print_background, result['pattern_image'], rotate_image, start_y, y, start_x, x)
|
||||||
|
|
||||||
# gray_image = cv2.cvtColor(mask_background, cv2.COLOR_BGR2GRAY)
|
# gray_image = cv2.cvtColor(mask_background, cv2.COLOR_BGR2GRAY)
|
||||||
# print_background = cv2.bitwise_and(print_background, print_background, mask=gray_image)
|
# print_background = cv2.bitwise_and(print_background, print_background, mask=gray_image)
|
||||||
|
|||||||
Reference in New Issue
Block a user