206 lines
6.6 KiB
Python
206 lines
6.6 KiB
Python
#!/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()
|