# 图片翻译数据合成 **Repository Path**: yaofeng/image-translate-data-creator ## Basic Information - **Project Name**: 图片翻译数据合成 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-19 - **Last Updated**: 2025-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这是一个【图片翻译】数据集合成的`Python`项目,能够合成图片翻译的数据对,用于训练或者验证。 ## 数据合成逻辑 遍历`images/source`目录下的所有图片,为每张图片随机选择【1~5】条文本段落(概率分布【2:3:3:1.5:0.5】),每个文本段落包含对应的【中、英、日、韩】四种语言;同时,为每张图片随机选择一种文字排版方式【横排/竖排,概率7:3】,以及一种文字渲染样式【多种气泡样式、发光效果、阴影、描边等】;然后用选中的样式和排版方式将生成的4种语言内容合成到图片上,生成4张新的图片,放在`images/target`目录中,用【_zh/_en/_ja/_ko】作为文件后缀。 ## 核心特点 - **多语言支持**:完整支持中文、英文、日文、韩文四语言 - **智能排版**:横排(长宽比>1.5)与竖排(长宽比<0.8)按7:3概率分布 - **丰富样式**:13种文字样式,包括多种气泡效果、发光效果、描边等 - **字体管理**:使用`assets/fonts/`目录管理项目字体,确保跨平台一致性 - **完全离线**:不依赖任何在线API,所有翻译数据内置 - **高质量渲染**:支持透明度、对比度、智能发光等高级效果 ## 数据质量保证 - 生成的四张新图片的文字完整,无缺失 - 生成的四张新图片的文字位置、渲染样式、排版样式必须一致 - 图片的文字大小保持一致,并支持动态调整 - CJK竖排文字遵循"从上到下,从右到左"的正确排版规则 ## 项目结构 ``` image-translate-data-creater/ ├── src/ │ ├── image_translator/ # 核心功能模块 │ │ ├── image_scanner.py # 图片文件扫描 │ │ ├── text_generator.py # 文本生成和翻译 │ │ ├── text_style.py # 样式和排版选择 │ │ ├── image_compositor.py # 图片文字合成 │ │ ├── pipeline.py # 主流程控制 │ │ └── __init__.py # 模块初始化 │ └── resource/ # 静态资源目录 │ └── text-data.json # 180条多语言对照文本数据 ├── assets/ │ └── fonts/ # 项目字体文件目录 │ ├── NotoSansCJKsc-Regular.otf # 简体中文Noto字体 │ ├── NotoSansCJKtc-Regular.otf # 繁体中文Noto字体 │ ├── wqy-zenhei.ttc # 文泉驿正黑字体 │ ├── wqy-microhei.ttc # 文泉驿微米黑字体 │ ├── DejaVuSans.ttf # 备用字体 │ └── README.md # 字体管理说明 ├── images/ │ ├── source/ # 源图片目录(60张预处理图片) │ └── target/ # 生成图片输出目录 ├── main.py # 主程序入口 ├── pyproject.toml # 项目配置 ├── CLAUDE.md # Claude Code指导文档 └── README.md # 项目说明文档 ``` ## 文本数据特点 项目内置180条预定义的静态文本,采用**90%现代内容 + 10%古典诗词**的比例,涵盖多个主题: - **现代生活**:科技发展、社会变迁、生活方式等 - **工作学习**:职业发展、技能提升、创新思维等 - **商业经济**:市场经济、创业创新、商业趋势等 - **社会文化**:文化交流、社会现象、人文思考等 - **自然景观**:自然环境、季节变化、地理风貌等 - **古典诗词**:论语、老子、唐诗宋词等传统文化经典 每条文本都有对应的高质量英语、日语、韩语翻译,文本长度在5-50字之间。 ## 使用方法 ### 安装依赖 ```bash # 使用uv安装依赖(推荐) uv sync # 或使用pip安装基础依赖 pip install Pillow numpy ``` ### 命令行使用 ```bash # 基本使用 - 处理所有图片 python3 main.py # 指定处理的图片数量 python3 main.py --limit 10 # 预览模式 - 显示配置而不实际处理 python3 main.py --preview # 验证环境 - 检查依赖和文件 python3 main.py --validate # 清理输出目录 - 删除生成的文件 python3 main.py --cleanup # 详细日志输出 python3 main.py --verbose ``` ### 编程接口 ```python from src.image_translator import ImageTranslationPipeline # 创建管道 pipeline = ImageTranslationPipeline() # 处理所有图片 stats = pipeline.process_all_images() # 处理指定数量的图片 stats = pipeline.process_images(limit=10) # 处理单张图片 result = pipeline.process_single_image("path/to/image.jpg") ``` ## 依赖说明 ### 核心依赖 - `Pillow>=10.0.0` - 图片处理和文字渲染 - `numpy>=1.24.0` - 数值计算支持 ### 系统要求 - Python 3.12+ - 磁盘空间:建议至少2GB(用于生成的图片和字体文件) ## 性能特点 - **源图片数量**:60张预处理完成的图片 - **内置文本数量**:200条高质量四语对照文本 - **处理速度**:平均每张图片1-3秒(取决于样式复杂度) - **输出数量**:每张源图片生成4张多语言图片 - **翻译速度**:静态查找,毫秒级响应 - **字体管理**:优先使用项目本地字体,确保一致性 ## 文字样式特性 ### 支持的渲染样式 - **PLAIN**: 无样式纯文字 - **WHITE_SHADOW**: 白色阴影效果 - **DIALOG_BUBBLE**: 对话气泡 - **BUBBLE系列**: 蓝色、红色、绿色、紫色、深色、云朵、圆角气泡 - **BLACK_OUTLINE**: 黑色描边 - **GLOW_EFFECT**: 发光效果 - **GRADIENT_FILL**: 渐变填充 ### 智能特性 - **动态字体大小**:根据段落数量(1-5段)自动调整字体大小 - **气泡透明度**:随机0-50%透明度,确保文字对比度 - **智能发光**:深色文字用白色发光,浅色文字用黑色发光 - **CJK竖排**:遵循"从上到下,从右到左"的正确排版规则 - **长宽比控制**:横排长宽比>1.5,竖排长宽比<0.8 - **多段落防重叠**:智能位置算法,确保多个文本段落不重叠 - **边界安全保护**:100px安全边距,防止文本超出画面范围 - **多语言尺寸适配**:动态调整字体大小,适应不同语言长度差异 - **智能换行处理**:区分英文单词和CJK字符的不同换行策略 ## 文件命名规范 生成的文件按照以下规范命名: - 中文版本:`原文件名_zh.jpg` - 英文版本:`原文件名_en.jpg` - 日文版本:`原文件名_ja.jpg` - 韩文版本:`原文件名_ko.jpg` ## 字体管理 项目使用 `assets/fonts/` 目录管理字体文件: - **Noto Sans CJK**: 主要支持字体,完全支持中日韩字符 - **文泉驿字体**: 开源中文字体,提供良好兼容性 - **DejaVu**: 备用字体,支持基本字符集 - **自动回退**: 优先使用本地字体,失败时自动回退到系统字体 详细说明请参考 `assets/fonts/README.md` ## 技术优势 1. **完全离线**:不依赖任何在线服务,可断网使用 2. **质量保证**:人工翻译的高质量四语对照文本 3. **高速处理**:静态查找比在线API快100倍 4. **稳定可靠**:无网络延迟、无API限制、无费用 5. **跨平台一致性**:自带字体文件,确保不同系统下渲染一致 6. **丰富样式**:13种专业级文字样式和效果 7. **智能排版**:自动优化文字布局和长宽比 8. **容错设计**:多层备用方案,确保程序稳定运行 ## 开发状态 - ✅ 核心功能模块完成 - ✅ 多语言文字合成完成 - ✅ 13种文字样式实现 - ✅ 智能排版和字体管理完成 - ✅ CJK竖排功能完成 - ✅ 字体文件本地化管理完成 - ✅ 图片预处理工具完成 - ✅ 项目文档完善 - ✅ 开发调试代码清理完成 ## 项目开发难点与解决方案 ### 主要技术挑战 #### 1. CJK竖排文字排版问题 **难点**:CJK竖排文字需要遵循"从上到下,从右到左"的排版规则,首个字符应在右上角,但初始实现错误地从左到右排列。 **解决方案**: - 分析CJK竖排的正确排版规则 - 修改文字渲染逻辑,确保从右上角开始,垂直向下排列 - 实现正确的列间距控制,每列从右向左递进 #### 2. 多种文字渲染效果实现 **难点**:需要实现13种不同的文字样式,包括气泡效果、发光效果、阴影描边等,且要保证效果的质量和兼容性。 **解决方案**: - 采用分层渲染技术:先渲染发光层,再渲染阴影层,最后渲染文字主体 - 实现智能颜色对比度算法,确保气泡颜色与文字颜色有足够差异 - 添加随机透明度控制(0-50%),增加视觉效果多样性 #### 3. 多语言文本尺寸差异导致的重叠问题 **难点**:同一文本的中、英、日、韩四种语言版本长度差异巨大,容易导致文字重叠或超出图片边界。 **解决方案**: - 实现动态字体大小调整算法,根据所有语言版本中最长文本计算合适字体大小 - 添加智能文本换行功能,区分CJK字符和英文单词的不同处理方式 - 实现严格的边界检查机制,预留100px安全边距 - 开发多段落智能布局算法,避免段落间重叠 #### 4. 英文文本换行完整性保护 **难点**:英文文本换行时不能随意切断单词,需要保持单词完整性。 **解决方案**: - 实现CJK字符检测机制,区分英文和CJK字符 - 对英文文本采用单词级别的换行逻辑 - 对CJK文本采用字符级别的换行逻辑 #### 5. 字体跨平台兼容性 **难点**:不同操作系统的字体支持和路径不同,可能导致文字渲染失败。 **解决方案**: - 建立项目本地字体目录 `assets/fonts/`,优先使用自带字体 - 实现字体测试机制,验证字体是否支持目标字符 - 建立完整的字体回退机制,确保在任何环境下都能正常渲染 #### 6. 文本内容质量控制 **难点**:需要高质量的四语对照文本,既要保证翻译准确性,又要符合现代语言习惯。 **解决方案**: - 创建包含180条文本的高质量语料库(90%现代内容 + 10%古典诗词) - 涵盖技术、生活、文化、商业等多个领域 - 确保所有语言版本的翻译质量和长度适中 #### 7. 文字块布局长宽比控制 **难点**:需要确保横排文字块长宽比>1.5,竖排文字块长宽比<0.8,保证视觉效果。 **解决方案**: - 实现智能布局算法,根据排版方向动态调整文字区域 - 采用概率分布控制(横排:竖排 = 7:3) - 通过字体大小和行间距精细控制长宽比 #### 8. 项目代码质量和维护性 **难点**:开发过程中产生冗余代码和临时文件,需要保持代码整洁。 **解决方案**: - 定期进行代码审查,删除未使用的模块和函数 - 优化导入语句,消除重复导入 - 建立清晰的模块结构和依赖关系 ### 核心技术方案 #### 多层渲染引擎 ```python # 渲染层级:背景 -> 发光 -> 阴影 -> 气泡 -> 文字 rendering_layers = [ ("glow", glow_radius, glow_color), ("shadow", shadow_offset, shadow_color), ("bubble", bubble_padding, bubble_color), ("text", 0, font_color) ] ``` #### 文本重叠和边界问题解决方案 **1. 智能位置计算算法** ```python # 基于图片尺寸和文本长度的精确计算 margin = 100 # 增加安全边距 char_width = font_size * 0.8 # 横排字符宽度估算 char_height = font_size * 1.4 # 行高估算 # 动态计算每行最大字符数 max_chars_per_line = max(10, (image_width - 2 * margin) // char_width) # 智能换行和区域大小计算 if text_length <= max_chars_per_line: lines = 1 else: lines = min(6, (text_length + max_chars_per_line - 1) // max_chars_per_line) ``` **2. 多段落智能布局算法** ```python # 重叠检测和位置调整 def _regions_overlap(pos1, pos2, margin=40): # 扩展边界检查区域 pos1_expanded = TextPosition( pos1.x - margin, pos1.y - margin, pos1.width + 2 * margin, pos1.height + 2 * margin ) # 检查是否重叠 return not (pos1_expanded.x + pos1_expanded.width <= pos2.x or ...) # 网格化位置搜索策略 for attempt in range(max_attempts): if attempt < max_attempts // 2: # 前半部分使用网格搜索 grid_x = (attempt % 10) * grid_size + margin grid_y = (attempt // 10) * grid_size + margin else: # 后半部分使用随机搜索 new_x = random.randint(margin, image_width - position.width - margin) new_y = random.randint(margin, image_height - position.height - margin) ``` **3. 动态字体大小调整** ```python def _calculate_dynamic_font_size(base_size, zh_length, current_length, max_length): # 基于最大长度计算缩放因子 if max_length > zh_length * 1.3: scale_factor = zh_length / max_length scale_factor = max(0.6, min(0.85, scale_factor)) # 限制在60%-85% adjusted_size = int(base_size * scale_factor) return max(adjusted_size, max(10, base_size // 2)) # 适度调整当前语言差异 elif current_length > zh_length * 1.4: scale_factor = min(0.9, zh_length / current_length) return max(int(base_size * scale_factor), max(12, base_size // 2)) return base_size ``` #### 智能字体大小算法 - 根据段落数量动态调整基础字体大小 - 考虑文本长度和图片尺寸的综合因素 - 确保多语言版本的一致性和可读性 - 最小字体大小保护(10-12px) - 最大长度缩放限制(60%-85%) #### 字体加载优先级 1. 项目本地字体 (`assets/fonts/`) 2. 用户字体 (`~/.fonts/`) 3. 系统字体 (`/usr/share/fonts/`) ### 最佳实践总结 1. **分层开发**:将复杂的渲染效果分解为多个独立层级 2. **智能回退**:为每个关键功能设计多级备用方案 3. **质量优先**:在性能和质量之间选择保证渲染质量 4. **跨平台设计**:确保代码在不同操作系统下的一致性 5. **增量开发**:先实现基础功能,再逐步添加高级特效 6. **充分测试**:对每个关键功能进行边界条件测试 ### 经验教训 1. **字体管理**:项目自带字体是确保跨平台一致性的关键 2. **边界检查**:文字渲染必须考虑各种边界情况和异常处理 3. **性能平衡**:复杂效果与处理速度需要找到平衡点 4. **代码组织**:清晰的模块结构对长期维护至关重要 5. **测试覆盖**:自动化测试能大幅提高开发效率 ## 许可证 本项目采用MIT许可证,可自由使用和修改。 ## 字体许可证 - **Noto Sans CJK**: SIL Open Font License (OFL) - **文泉驿字体**: GPL/自由软件许可证 - **DejaVu**: License that permits embedding