重构程序文件目录结构并更新相关路径引用

- 创建新的目录结构:research/、tools/(含子目录)和apps/
- 移动核心理论文件到research/core-theory/
- 移动天山理论文件到research/specialized/
- 重组tools/目录为多个子目录:content-generation/、data-processing/等
- 更新所有文档中的路径引用,包括README.md、项目结构说明.md等
- 更新工作流文件和脚本中的路径引用
- 更新文档索引文件中的路径引用
This commit is contained in:
ben
2025-10-27 12:54:26 +00:00
parent a60b82182d
commit 5b0a6c7bc1
22 changed files with 243 additions and 70 deletions

View File

@@ -0,0 +1,250 @@
#!/usr/bin/env python3
"""
胡汉三千年项目 - 图像转换工具
支持 PPM -> PNG/JPG/SVG 转换
"""
import os
import sys
from pathlib import Path
import argparse
def install_requirements():
"""安装必要的依赖包"""
import subprocess
packages = [
'Pillow>=10.0.0', # PIL的现代版本
'opencv-python>=4.8.0', # OpenCV
'svgwrite>=1.4.0', # SVG生成
'numpy>=1.24.0', # 数值计算
]
print("🔧 安装必要的Python包...")
for package in packages:
try:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
print(f"{package} 安装成功")
except subprocess.CalledProcessError as e:
print(f"{package} 安装失败: {e}")
return False
return True
def convert_ppm_to_png(ppm_path, output_path=None, quality=95):
"""将PPM文件转换为PNG格式"""
try:
from PIL import Image
if output_path is None:
output_path = str(Path(ppm_path).with_suffix('.png'))
# 打开PPM文件
with Image.open(ppm_path) as img:
# 转换为RGB模式PPM通常是RGB
if img.mode != 'RGB':
img = img.convert('RGB')
# 保存为PNG
img.save(output_path, 'PNG', optimize=True)
print(f"✅ PPM -> PNG: {ppm_path} -> {output_path}")
return output_path
except ImportError:
print("❌ 需要安装 Pillow: pip install Pillow")
return None
except Exception as e:
print(f"❌ 转换失败: {e}")
return None
def convert_ppm_to_jpg(ppm_path, output_path=None, quality=95):
"""将PPM文件转换为JPG格式"""
try:
from PIL import Image
if output_path is None:
output_path = str(Path(ppm_path).with_suffix('.jpg'))
with Image.open(ppm_path) as img:
if img.mode != 'RGB':
img = img.convert('RGB')
img.save(output_path, 'JPEG', quality=quality, optimize=True)
print(f"✅ PPM -> JPG: {ppm_path} -> {output_path}")
return output_path
except ImportError:
print("❌ 需要安装 Pillow: pip install Pillow")
return None
except Exception as e:
print(f"❌ 转换失败: {e}")
return None
def create_svg_template(image_path, output_path=None):
"""为图像创建SVG模板"""
try:
import svgwrite
from PIL import Image
if output_path is None:
output_path = str(Path(image_path).with_suffix('.svg'))
# 获取图像尺寸
with Image.open(image_path) as img:
width, height = img.size
# 创建SVG文档
dwg = svgwrite.Drawing(output_path, size=(f"{width}px", f"{height}px"))
# 添加背景矩形
dwg.add(dwg.rect(insert=(0, 0), size=(width, height),
fill='white', stroke='black', stroke_width=1))
# 添加标题
dwg.add(dwg.text('胡汉三千年 - 图像模板',
insert=(width//2, 30),
text_anchor='middle',
font_size=16,
font_family='Arial'))
# 添加说明文字
dwg.add(dwg.text('此SVG模板需要手动添加具体内容',
insert=(width//2, height-30),
text_anchor='middle',
font_size=12,
font_family='Arial'))
dwg.save()
print(f"✅ SVG模板创建: {output_path}")
return output_path
except ImportError:
print("❌ 需要安装 svgwrite: pip install svgwrite")
return None
except Exception as e:
print(f"❌ SVG创建失败: {e}")
return None
def batch_convert_directory(directory_path, formats=['png', 'jpg']):
"""批量转换目录中的所有PPM文件"""
directory = Path(directory_path)
if not directory.exists():
print(f"❌ 目录不存在: {directory_path}")
return
ppm_files = list(directory.rglob('*.ppm'))
if not ppm_files:
print(f"❌ 在 {directory_path} 中未找到PPM文件")
return
print(f"🔍 找到 {len(ppm_files)} 个PPM文件")
converted_count = 0
for ppm_file in ppm_files:
print(f"\n📁 处理: {ppm_file}")
for format_type in formats:
if format_type == 'png':
result = convert_ppm_to_png(str(ppm_file))
elif format_type == 'jpg':
result = convert_ppm_to_jpg(str(ppm_file))
elif format_type == 'svg':
result = create_svg_template(str(ppm_file))
if result:
converted_count += 1
print(f"\n🎉 批量转换完成! 成功转换 {converted_count} 个文件")
def analyze_image_content(image_path):
"""分析图像内容并生成描述"""
try:
from PIL import Image
import numpy as np
with Image.open(image_path) as img:
width, height = img.size
mode = img.mode
# 转换为numpy数组进行分析
img_array = np.array(img)
print(f"📊 图像分析: {image_path}")
print(f" 尺寸: {width} x {height}")
print(f" 模式: {mode}")
print(f" 数据类型: {img_array.dtype}")
print(f" 形状: {img_array.shape}")
# 分析颜色分布
if len(img_array.shape) == 3: # RGB图像
unique_colors = len(np.unique(img_array.reshape(-1, img_array.shape[-1]), axis=0))
print(f" 唯一颜色数: {unique_colors}")
return {
'width': width,
'height': height,
'mode': mode,
'shape': img_array.shape
}
except Exception as e:
print(f"❌ 图像分析失败: {e}")
return None
def main():
parser = argparse.ArgumentParser(description='胡汉三千年项目 - 图像转换工具')
parser.add_argument('--install', action='store_true', help='安装必要的依赖包')
parser.add_argument('--convert', type=str, help='转换单个PPM文件')
parser.add_argument('--batch', type=str, help='批量转换目录中的所有PPM文件')
parser.add_argument('--analyze', type=str, help='分析图像内容')
parser.add_argument('--formats', nargs='+', default=['png', 'jpg'],
help='转换格式 (png, jpg, svg)')
args = parser.parse_args()
if args.install:
if install_requirements():
print("🎉 所有依赖包安装完成!")
else:
print("❌ 依赖包安装失败")
sys.exit(1)
elif args.convert:
ppm_path = args.convert
if not os.path.exists(ppm_path):
print(f"❌ 文件不存在: {ppm_path}")
sys.exit(1)
print(f"🔄 转换文件: {ppm_path}")
for format_type in args.formats:
if format_type == 'png':
convert_ppm_to_png(ppm_path)
elif format_type == 'jpg':
convert_ppm_to_jpg(ppm_path)
elif format_type == 'svg':
create_svg_template(ppm_path)
elif args.batch:
print(f"🔄 批量转换目录: {args.batch}")
batch_convert_directory(args.batch, args.formats)
elif args.analyze:
image_path = args.analyze
if not os.path.exists(image_path):
print(f"❌ 文件不存在: {image_path}")
sys.exit(1)
analyze_image_content(image_path)
else:
print("🎯 胡汉三千年项目 - 图像转换工具")
print("\n使用方法:")
print(" python image_converter.py --install # 安装依赖")
print(" python image_converter.py --convert file.ppm # 转换单个文件")
print(" python image_converter.py --batch images/ # 批量转换目录")
print(" python image_converter.py --analyze file.png # 分析图像")
print(" python image_converter.py --formats png jpg svg # 指定转换格式")
if __name__ == '__main__':
main()