#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 检查换装图片文件 """ from pathlib import Path import hashlib # 图片源目录 SOURCE_DIR = Path('开发/2026年2月4日/Image') # 期望的文件列表 EXPECTED_FILES = { # 上装 - 女性 "女性上衣白色T桖.png": "白色T恤", "女性-上装-粉丝短袖.png": "粉色短袖", "女性-上装-蓝色衬衫.png": "蓝色衬衫", "女性-上装-灰色卫衣.png": "灰色卫衣", "女性-上装-收费-蕾丝吊带上衣.png": "蕾丝吊带上衣", "女性-上装-收费-一字领露肩上衣.png": "一字领露肩上衣", "女性-上装-收费-露脐短袖.png": "露脐短袖", "女性-上装-收费-针织开衫.png": "针织开衫", "女性-上装-收费-小香风外套.png": "小香风外套", "女性-上装-vlp专属-真丝衬衫.png": "真丝衬衫", # 下装 - 女性 "女性-下衣-蓝色牛仔裤.png": "蓝色牛仔裤", "女性-下衣-黑色短裙.png": "黑色短裙", "女性-下衣-白色短裙.png": "白色短裤", "女性-下衣-灰色运动裤.png": "灰色运动裤", "女性-下衣-A字半身裙.png": "A字半身裙", "女性-下衣-高腰阔腿裤.png": "高腰阔腿裤", "女性-下衣-收费-百褶短裙.png": "百褶短裙", "女性-下衣-收费-破洞牛仔裤.png": "破洞牛仔裤", "女性-下衣-收费-西装裤.png": "西装裤", # 连衣裙 - 女性 "女性-连衣裙-白色连衣裙.png": "白色连衣裙", "女性-连衣裙-碎花连衣裙.png": "碎花连衣裙", "女性-连衣裙-黑色小礼服.png": "黑色小礼服", "女性-连衣裙-优雅长裙.png": "优雅长裙", "女性-连衣裙-吊带连衣裙.png": "吊带连衣裙", "女性-连衣裙-JK制服.png": "JK制服", "女性-连衣裙-汉服.png": "汉服", "女性-连衣裙-洛丽塔.png": "洛丽塔", "女性-连衣裙-圣诞服装.png": "圣诞装", "女性-连衣裙-高级定制婚纱.png": "高级定制婚纱", } def get_file_hash(file_path): """计算文件 MD5 哈希值""" md5 = hashlib.md5() with open(file_path, 'rb') as f: for chunk in iter(lambda: f.read(4096), b""): md5.update(chunk) return md5.hexdigest() def check_images(): """检查图片文件""" print("=" * 70) print(" 换装图片文件检查") print("=" * 70) print() if not SOURCE_DIR.exists(): print(f"❌ 错误:源目录不存在: {SOURCE_DIR}") return # 获取所有 PNG 文件 all_files = list(SOURCE_DIR.glob("*.png")) print(f"📁 源目录: {SOURCE_DIR}") print(f"📊 找到 {len(all_files)} 个 PNG 文件") print() # 检查期望的文件 print("=" * 70) print(" 检查期望的文件") print("=" * 70) print() missing_files = [] existing_files = [] file_sizes = {} for filename, description in EXPECTED_FILES.items(): file_path = SOURCE_DIR / filename if file_path.exists(): size = file_path.stat().st_size size_kb = size / 1024 file_sizes[filename] = size existing_files.append(filename) if size < 10000: # 小于 10KB 可能是空白或损坏 print(f"⚠️ {description}") print(f" 文件: {filename}") print(f" 大小: {size_kb:.1f} KB (可能是空白图片)") print() else: print(f"✓ {description}") print(f" 文件: {filename}") print(f" 大小: {size_kb:.1f} KB") print() else: missing_files.append((filename, description)) print(f"✗ {description}") print(f" 文件: {filename}") print(f" 状态: 缺失") print() # 检查重复的图片(相同内容) print("=" * 70) print(" 检查重复的图片") print("=" * 70) print() hash_map = {} duplicates = [] for filename in existing_files: file_path = SOURCE_DIR / filename file_hash = get_file_hash(file_path) if file_hash in hash_map: duplicates.append((filename, hash_map[file_hash])) print(f"⚠️ 发现重复图片:") print(f" 文件1: {hash_map[file_hash]}") print(f" 文件2: {filename}") print(f" 哈希: {file_hash}") print() else: hash_map[file_hash] = filename if not duplicates: print("✓ 没有发现重复的图片") print() # 检查额外的文件 print("=" * 70) print(" 检查额外的文件") print("=" * 70) print() expected_filenames = set(EXPECTED_FILES.keys()) actual_filenames = set(f.name for f in all_files) extra_files = actual_filenames - expected_filenames if extra_files: for filename in extra_files: file_path = SOURCE_DIR / filename size = file_path.stat().st_size size_kb = size / 1024 print(f"⚠️ 额外的文件: {filename}") print(f" 大小: {size_kb:.1f} KB") print() else: print("✓ 没有额外的文件") print() # 统计结果 print("=" * 70) print(" 统计结果") print("=" * 70) print() print(f"期望文件数: {len(EXPECTED_FILES)}") print(f"存在文件数: {len(existing_files)}") print(f"缺失文件数: {len(missing_files)}") print(f"重复图片数: {len(duplicates)}") print(f"额外文件数: {len(extra_files)}") print() # 建议 print("=" * 70) print(" 建议") print("=" * 70) print() if missing_files: print("⚠️ 缺失的文件需要补充:") for filename, description in missing_files: print(f" - {description} ({filename})") print() if duplicates: print("⚠️ 重复的图片需要替换为不同的图片:") for file1, file2 in duplicates: print(f" - {file1} 和 {file2} 内容相同") print() # 检查小文件(可能是空白) small_files = [(f, s) for f, s in file_sizes.items() if s < 10000] if small_files: print("⚠️ 以下文件可能是空白或损坏(小于 10KB):") for filename, size in small_files: print(f" - {filename} ({size / 1024:.1f} KB)") print() if not missing_files and not duplicates and not small_files: print("✓ 所有图片文件正常!") print() if __name__ == "__main__": check_images()