feat(新功能):
fix(修复bug): sketch拉伸导致的print比例不正确问题 docs(文档变更): refactor(重构): test(增加测试):
This commit is contained in:
@@ -53,9 +53,12 @@ class PrintPainting:
|
||||
print_background = np.zeros((result['pattern_image'].shape[0], result['pattern_image'].shape[1], 3), dtype=np.uint8)
|
||||
mask_background = np.zeros((result['pattern_image'].shape[0], result['pattern_image'].shape[1], 3), dtype=np.uint8)
|
||||
for i in range(len(single_print['print_path_list'])):
|
||||
if not (result['resize_scale'][0] == 1.0 and result['resize_scale'][1] == 1.0):
|
||||
single_print['location'][i] = (int(single_print['location'][i][0] * result['resize_scale'][0]), int(single_print['location'][i][1] * result['resize_scale'][1]))
|
||||
|
||||
image, image_mode = self.read_image(single_print['print_path_list'][i])
|
||||
if image_mode == "RGBA":
|
||||
new_size = (int(image.width * single_print['print_scale_list'][i]), int(image.height * single_print['print_scale_list'][i]))
|
||||
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]
|
||||
resized_source = image.resize(new_size)
|
||||
@@ -78,9 +81,12 @@ class PrintPainting:
|
||||
mask = np.expand_dims(mask, axis=2)
|
||||
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
|
||||
mask = cv2.bitwise_not(mask)
|
||||
|
||||
mask = cv2.resize(mask, (int(result['final_image'].shape[0] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[1] * single_print['print_scale_list'][i][1])))
|
||||
image = cv2.resize(image, (int(result['final_image'].shape[0] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[1] * single_print['print_scale_list'][i][1])))
|
||||
# 旋转后的坐标需要重新算
|
||||
rotate_mask, _ = self.img_rotate(mask, single_print['print_angle_list'][i], single_print['print_scale_list'][i])
|
||||
rotate_image, rotated_new_size = self.img_rotate(image, single_print['print_angle_list'][i], single_print['print_scale_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])
|
||||
# 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])
|
||||
|
||||
@@ -157,9 +163,11 @@ class PrintPainting:
|
||||
print_background = np.zeros((result['final_image'].shape[0], result['final_image'].shape[1], 3), dtype=np.uint8)
|
||||
mask_background = np.zeros((result['final_image'].shape[0], result['final_image'].shape[1], 3), dtype=np.uint8)
|
||||
for i in range(len(element_print['element_path_list'])):
|
||||
if not (result['resize_scale'][0] == 1.0 and result['resize_scale'][1] == 1.0):
|
||||
element_print['location'][i] = (int(element_print['location'][i][0] * result['resize_scale'][0]), int(element_print['location'][i][1] * result['resize_scale'][1]))
|
||||
image, image_mode = self.read_image(element_print['element_path_list'][i])
|
||||
if image_mode == "RGBA":
|
||||
new_size = (int(image.width * element_print['element_scale_list'][i]), int(image.height * element_print['element_scale_list'][i]))
|
||||
new_size = (int(result['final_image'].shape[1] * element_print['element_scale_list'][i][0]), int(result['final_image'].shape[0] * element_print['element_scale_list'][i][1]))
|
||||
|
||||
mask = image.split()[3]
|
||||
resized_source = image.resize(new_size)
|
||||
@@ -181,9 +189,11 @@ class PrintPainting:
|
||||
mask = np.expand_dims(mask, axis=2)
|
||||
mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
|
||||
mask = cv2.bitwise_not(mask)
|
||||
mask = cv2.resize(mask, (int(result['final_image'].shape[0] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[1] * single_print['print_scale_list'][i][1])))
|
||||
image = cv2.resize(image, (int(result['final_image'].shape[0] * single_print['print_scale_list'][i][0]), int(result['final_image'].shape[1] * single_print['print_scale_list'][i][1])))
|
||||
# 旋转后的坐标需要重新算
|
||||
rotate_mask, _ = self.img_rotate(mask, element_print['element_angle_list'][i], element_print['element_scale_list'][i])
|
||||
rotate_image, rotated_new_size = self.img_rotate(image, element_print['element_angle_list'][i], element_print['element_scale_list'][i])
|
||||
rotate_mask, _ = self.img_rotate(mask, element_print['element_angle_list'][i])
|
||||
rotate_image, rotated_new_size = self.img_rotate(image, element_print['element_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(element_print['location'][i][0] - rotated_new_size[0]), int(element_print['location'][i][1] - rotated_new_size[1])
|
||||
|
||||
@@ -425,7 +435,7 @@ class PrintPainting:
|
||||
return high, low
|
||||
|
||||
@staticmethod
|
||||
def img_rotate(image, angel, scale):
|
||||
def img_rotate(image, angel):
|
||||
"""顺时针旋转图像任意角度
|
||||
|
||||
Args:
|
||||
@@ -440,7 +450,7 @@ class PrintPainting:
|
||||
center = (w // 2, h // 2)
|
||||
# if type(angel) is not int:
|
||||
# angel = 0
|
||||
M = cv2.getRotationMatrix2D(center, -angel, scale)
|
||||
M = cv2.getRotationMatrix2D(center, -angel, 1)
|
||||
# 调整旋转后的图像长宽
|
||||
rotated_h = int((w * np.abs(M[0, 1]) + (h * np.abs(M[0, 0]))))
|
||||
rotated_w = int((h * np.abs(M[0, 1]) + (w * np.abs(M[0, 0]))))
|
||||
@@ -449,7 +459,7 @@ class PrintPainting:
|
||||
# 旋转图像
|
||||
rotated_img = cv2.warpAffine(image, M, (rotated_w, rotated_h))
|
||||
|
||||
return rotated_img, ((rotated_img.shape[1] - image.shape[1] * scale) // 2, (rotated_img.shape[0] - image.shape[0] * scale) // 2)
|
||||
return rotated_img, ((rotated_img.shape[1] - image.shape[1]) // 2, (rotated_img.shape[0] - image.shape[0]) // 2)
|
||||
# return rotated_img, (0, 0)
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user