Files
Waline-emoji/main.py
2025-07-15 09:43:01 +08:00

112 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import json
# 支持的图片扩展名(不区分大小写)
SUPPORTED_EXTENSIONS = {'.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp'}
def is_image_file(filename):
"""检查文件是否是支持的图片格式"""
return os.path.splitext(filename)[1].lower() in SUPPORTED_EXTENSIONS
def generate_index_json(image_files):
"""生成index.json文件内容"""
return {"0": sorted(image_files)}
def generate_info_json(image_files, category_name, icon_file):
"""生成info.json文件内容"""
return {
"name": category_name,
"icon": icon_file,
"items": sorted(image_files)
}
def process_directory(category_path, overwrite=False):
"""处理单个目录"""
# 获取目录中所有支持的图片文件
image_files = [
f for f in os.listdir(category_path)
if is_image_file(f) and os.path.isfile(os.path.join(category_path, f))
]
if not image_files:
print(f'警告: 目录 {category_path} 中没有支持的图片文件')
return False
# 文件路径
index_path = os.path.join(category_path, 'index.json')
info_path = os.path.join(category_path, 'info.json')
# 如果不覆盖且文件已存在,则跳过
if not overwrite and (os.path.exists(index_path) or os.path.exists(info_path)):
print(f'已跳过目录(文件已存在): {category_path}')
return False
# 选择第一个存在的图片文件作为icon
icon_file = next(
(f for f in image_files if os.path.exists(os.path.join(category_path, f))),
image_files[0]
)
try:
# 生成index.json保持原始字符
with open(index_path, 'w', encoding='utf-8') as f:
json.dump(generate_index_json(image_files), f, ensure_ascii=False, indent=2)
# 生成info.json强制Unicode转义
with open(info_path, 'w', encoding='ascii') as f:
json.dump(
generate_info_json(image_files, os.path.basename(category_path), icon_file),
f,
ensure_ascii=True,
indent=2
)
print(f'成功处理目录: {category_path}')
print(f' 发现 {len(image_files)} 个图片文件')
print(f' 使用图标: {icon_file}')
return True
except Exception as e:
print(f'处理目录 {category_path} 时出错: {str(e)}')
return False
def main():
print("=== Waline 表情包JSON生成器 ===")
print("将遍历emoji目录并生成index.json和info.json")
# 询问是否覆盖已存在文件
overwrite = False
while True:
choice = input("是否重新生成所有已存在的JSON文件(y/n): ").lower()
if choice == 'y':
overwrite = True
break
elif choice == 'n':
break
print("请输入 y 或 n")
root_dir = 'emoji'
if not os.path.exists(root_dir):
print(f"错误: 目录 {root_dir} 不存在")
return
processed = 0
skipped = 0
errors = 0
print("\n开始处理目录...")
for category in os.listdir(root_dir):
category_path = os.path.join(root_dir, category)
if os.path.isdir(category_path):
if process_directory(category_path, overwrite):
processed += 1
else:
skipped += 1
print("\n=== 处理完成 ===")
print(f"已处理目录: {processed}")
print(f"已跳过目录: {skipped}")
print(f"错误目录: {errors}")
if __name__ == '__main__':
main()