Compare commits
3 Commits
3bf543f95a
...
5631f20efb
| Author | SHA1 | Date |
|---|---|---|
|
|
5631f20efb | |
|
|
64b41cbb5c | |
|
|
bc0b2f100d |
BIN
CheckPsd/新关卡.psd
BIN
CheckPsd/新关卡.psd
Binary file not shown.
160
check_zip_psd.py
160
check_zip_psd.py
|
|
@ -28,6 +28,13 @@ def check_psd(psd_path):
|
|||
# elif not names[2][0].isdigit():
|
||||
# error_log.append(f'{psd_name}:{config.error_log.psd_name_error.value}')
|
||||
|
||||
try:
|
||||
psd_point_num = int(names[1][:2])
|
||||
except Exception as e:
|
||||
print(e)
|
||||
error_log.append(config.error_log.psd_name_error.value)
|
||||
return
|
||||
|
||||
psd = PSDImage.open(psd_path)
|
||||
|
||||
color_mode = get_psd_color_mode(psd_path)
|
||||
|
|
@ -40,16 +47,28 @@ def check_psd(psd_path):
|
|||
psd_width = psd.width
|
||||
psd_height = psd.height
|
||||
|
||||
# print(f'{psd.size}')
|
||||
|
||||
if (psd_width != config.psd_standard_width and psd_width != config.psd_standard_width2) or (psd_height != config.psd_standard_height and psd_height != config.psd_standard_height2):
|
||||
error_log.append(f'{psd_name}:{config.error_log.psd_size_error.value}')
|
||||
|
||||
|
||||
titem_name = 'titem'
|
||||
tfull_name = 'tfull'
|
||||
tmask_name = 'tmask'
|
||||
tlight_name = 'tlight'
|
||||
tshadow_name = 'tshadow'
|
||||
group_name = 'group_'
|
||||
|
||||
all_items = []
|
||||
all_full = {}
|
||||
all_mask = []
|
||||
all_tlight = []
|
||||
all_tshadow = []
|
||||
all_color_it_full = []
|
||||
all_color_it_item = []
|
||||
all_group = []
|
||||
all_group_num = []
|
||||
# all_color_it_full = []
|
||||
# all_color_it_item = []
|
||||
is_exist_base = False
|
||||
is_exist_titem_group = False
|
||||
all_occlusion_degree = []
|
||||
|
|
@ -59,45 +78,77 @@ def check_psd(psd_path):
|
|||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.name_contains_spaces.value}')
|
||||
if layer.name == 'nouse' and layer.is_group():
|
||||
continue
|
||||
if layer.name == 'titem' and layer.is_group():
|
||||
if layer.name == titem_name and layer.is_group():
|
||||
is_exist_titem_group = True
|
||||
for item_layer in layer:
|
||||
if ' ' in item_layer.name:
|
||||
error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.name_contains_spaces.value}')
|
||||
# item_names = item_layer.name.split('_')
|
||||
if 'titem' in item_layer.name:
|
||||
if item_layer.name in all_items or item_layer.name in all_color_it_item:
|
||||
if titem_name in item_layer.name:
|
||||
if item_layer.name in all_items: ##or item_layer.name in all_color_it_item:
|
||||
error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
if 'titemcolor' in item_layer.name:
|
||||
all_color_it_item.append(item_layer.name)
|
||||
else:
|
||||
all_items.append(item_layer.name)
|
||||
# if 'titemcolor' in item_layer.name:
|
||||
# all_color_it_item.append(item_layer.name)
|
||||
# else:
|
||||
all_items.append(item_layer.name)
|
||||
else:
|
||||
error_log.append(f'{psd_name}:{item_layer.name}:{config.error_log.psd_item_name_error.value}')
|
||||
elif not layer.is_group() and 'tfull' in layer.name:
|
||||
if layer.name in all_full.keys() or layer.name in all_color_it_full:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
|
||||
elif group_name in layer.name:
|
||||
try:
|
||||
group_num_str = layer.name.replace(group_name, "")
|
||||
group_num = int(group_num_str)
|
||||
except Exception as e:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.group_name_error.value}')
|
||||
print(e)
|
||||
continue
|
||||
if group_num <= 0 or group_num > psd_point_num:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.group_name_error.value}')
|
||||
continue
|
||||
else:
|
||||
if 'tfullcolor' in layer.name:
|
||||
all_color_it_full.append(layer.name)
|
||||
else:
|
||||
all_full[layer.name] = (layer.left, layer.top, layer.width, layer.height)
|
||||
elif not layer.is_group() and 'tmask' in layer.name:
|
||||
if layer.name in all_mask:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
all_group_num.append(group_num)
|
||||
|
||||
if not layer.is_group():
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.group_name_error.value}')
|
||||
elif layer.name in all_group:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_group.value}')
|
||||
else:
|
||||
all_mask.append(layer.name)
|
||||
elif not layer.is_group() and 'tlight' in layer.name:
|
||||
if layer.name in all_tlight:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
all_tlight.append(layer.name)
|
||||
elif not layer.is_group() and 'tshadow' in layer.name:
|
||||
if layer.name in all_tshadow:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
all_tshadow.append(layer.name)
|
||||
all_group.append(layer.name)
|
||||
is_exit_full = False
|
||||
for child_layer in layer:
|
||||
if group_num_str not in child_layer.name:
|
||||
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.child_layer_not_in_group.value}')
|
||||
|
||||
if child_layer.is_group():
|
||||
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.child_layer_is_group.value}')
|
||||
else:
|
||||
if tfull_name in child_layer.name:
|
||||
if child_layer.name in all_full.keys():
|
||||
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
all_full[child_layer.name] = (child_layer.left, child_layer.top, child_layer.width, child_layer.height)
|
||||
is_exit_full = True
|
||||
elif tmask_name in child_layer.name:
|
||||
if child_layer.name in all_mask:
|
||||
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
all_mask.append(child_layer.name)
|
||||
elif tshadow_name in child_layer.name:
|
||||
if child_layer.name in all_tshadow:
|
||||
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
all_tshadow.append(child_layer.name)
|
||||
elif tlight_name in child_layer.name:
|
||||
if child_layer.name in all_tlight:
|
||||
error_log.append(f'{psd_name}:{child_layer.name}:{config.error_log.exit_repeat_layer.value}')
|
||||
else:
|
||||
all_tlight.append(child_layer.name)
|
||||
else:
|
||||
error_log.append(
|
||||
f'{psd_name}:{child_layer.name}:{config.error_log.child_layer_unknown.value}')
|
||||
if not is_exit_full:
|
||||
error_log.append(f'{psd_name}:{layer.name}:{config.error_log.group_tfull_not_exit.value}')
|
||||
elif layer.name == 'base':
|
||||
if is_exist_base:
|
||||
error_log.append(f'{psd_name}:{config.error_log.exit_more_base.value}')
|
||||
|
|
@ -111,36 +162,59 @@ def check_psd(psd_path):
|
|||
if not is_exist_titem_group:
|
||||
error_log.append(f'{psd_name}:{config.error_log.item_group_not_exit.value}')
|
||||
|
||||
for i in range(1,psd_point_num + 1):
|
||||
if i not in all_group_num:
|
||||
error_log.append(f'{psd_name}:{i}:{config.error_log.group_lack.value}')
|
||||
|
||||
all_item_count = len(all_items)
|
||||
if len(all_full) != all_item_count or (
|
||||
len(all_color_it_item) != 0 and len(all_color_it_item) != all_item_count) or (
|
||||
len(all_color_it_full) != 0 and len(all_color_it_full) != all_item_count):
|
||||
if len(all_full) != all_item_count:
|
||||
#or ( len(all_color_it_item) != 0 and len(all_color_it_item) != all_item_count) or (
|
||||
#len(all_color_it_full) != 0 and len(all_color_it_full) != all_item_count):
|
||||
error_log.append(f'{psd_name}:{config.error_log.item_or_full_num_error.value}')
|
||||
|
||||
for item in all_items:
|
||||
full_name = item.replace('item', 'full')
|
||||
if full_name not in all_full.keys():
|
||||
error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_full.value}')
|
||||
if len(all_color_it_item) > 0 and len(all_color_it_full) > 0:
|
||||
for item in all_items:
|
||||
fullcolor_name = item.replace('item', 'fullcolor')
|
||||
itemcolor_name = item.replace('item', 'itemcolor')
|
||||
if fullcolor_name not in all_color_it_full:
|
||||
error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_fullcolor.value}')
|
||||
if itemcolor_name not in all_color_it_item:
|
||||
error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_itemcolor.value}')
|
||||
# if len(all_color_it_item) > 0 and len(all_color_it_full) > 0:
|
||||
# for item in all_items:
|
||||
# fullcolor_name = item.replace('item', 'fullcolor')
|
||||
# itemcolor_name = item.replace('item', 'itemcolor')
|
||||
# if fullcolor_name not in all_color_it_full:
|
||||
# error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_fullcolor.value}')
|
||||
# if itemcolor_name not in all_color_it_item:
|
||||
# error_log.append(f'{psd_name}:{item}:{config.error_log.psd_not_itemcolor.value}')
|
||||
|
||||
# if not os.path.exists('./test'):
|
||||
# os.mkdir('./test')
|
||||
|
||||
def find_layer_by_name(layers, target_name):
|
||||
"""递归搜索图层中指定名称的图层"""
|
||||
for layer in layers:
|
||||
if layer.name == target_name:
|
||||
return layer
|
||||
if layer.is_group(): # 检查是否为组
|
||||
found = find_layer_by_name(layer, target_name)
|
||||
if found:
|
||||
return found
|
||||
return None
|
||||
|
||||
# 计算mask和full的遮罩百分比
|
||||
for cur_mask in all_mask:
|
||||
img_mask = psd.composite(layer_filter=lambda mask_layer: mask_layer.name == cur_mask)
|
||||
# img_mask = psd.composite(layer_filter=lambda mask_layer: mask_layer.name == cur_mask)
|
||||
layer_mask = find_layer_by_name(psd,cur_mask)
|
||||
full_name = cur_mask.replace('mask', 'full')
|
||||
cur_full_rect = None
|
||||
if full_name in all_full.keys():
|
||||
cur_full_rect = all_full[full_name]
|
||||
img_full = psd.composite(layer_filter=lambda full_layer: full_layer.name == full_name)
|
||||
# img_full = psd.composite(layer_filter=lambda full_layer: full_layer.name == full_name)
|
||||
layer_full = find_layer_by_name(psd, full_name)
|
||||
if layer_mask is None or layer_full is None:
|
||||
error_log.append(f'{psd_name}:{cur_mask}:{config.error_log.not_find_mask_full.value}')
|
||||
break
|
||||
img_mask = psd.composite(layer_mask)
|
||||
img_full = psd.composite(layer_full)
|
||||
|
||||
# img_mask.save(f'./test/{cur_mask}.png')
|
||||
# img_full.save(f'./test/{full_name}.png')
|
||||
per = get_item_mask_contact_ratio(img_full, img_mask, cur_full_rect)
|
||||
|
|
|
|||
13
config.py
13
config.py
|
|
@ -3,7 +3,7 @@ import enum
|
|||
psd_standard_width = 3000
|
||||
psd_standard_height = 2000
|
||||
psd_standard_width2 = 2000
|
||||
psd_standard_height2 = 3000
|
||||
psd_standard_height2 = 2910
|
||||
|
||||
|
||||
class error_log(enum.Enum):
|
||||
|
|
@ -20,5 +20,14 @@ class error_log(enum.Enum):
|
|||
item_or_full_num_error = 'item,full或itemcolor,fullcolor的个数不全部相同'
|
||||
name_contains_spaces = '该图层名字中包含空格'
|
||||
psd_mask_not_full = '没有mask对应的full'
|
||||
not_find_mask_full = '没有找到mask或者full'
|
||||
layer_not_need = '图层第一级有不属于我们需要的图层'
|
||||
psd_cmyk = 'psd是CMYK的色彩空间'
|
||||
psd_cmyk = 'psd是CMYK的色彩空间'
|
||||
|
||||
exit_repeat_group = '存在重复的分组'
|
||||
group_name_error = '分组的名字错误'
|
||||
child_layer_is_group = '子层级是个分组'
|
||||
child_layer_unknown = '子层级名字未知'
|
||||
child_layer_not_in_group = '子层级名字和分组名字没有对应上'
|
||||
group_tfull_not_exit = '分组下没有full图层'
|
||||
group_lack = '缺少这个group'
|
||||
Loading…
Reference in New Issue