基于 Python 和 handright 的手写图片生成工具。
Important
本项目不提供二进制包,请自行克隆
GPU 需 NVIDIA 显卡 + CUDA Toolkit
多字体效果依赖字体风格一致性,否则可能突兀
字体文件体积过大且存在法律风险,本项目不提供
相比于原项目,本版本进行了以下改进:
- 现代化界面:采用标签页设计,参数分类更清晰
- 多字体支持:支持最多20个字体文件,实现智能字体切换
- 图形化颜色选择器:取代手动输入RGB值的方式
- 增强的导出功能:支持PNG/JPEG格式及质量设置
- GPU加速:可选的NVIDIA GPU加速支持(CuPy)
- 改进的配置系统:使用YAML格式替代纯文本配置
- 现代化依赖管理:使用uv管理依赖,符合现代Python项目的组织方式
Important
本项目 fork 自 hand-write(MIT 许可)
自 2025 年起,本版本由 ReRokutosei 重写并以 GPLv3 发布。原始版权声明按 MIT 要求保留在 NOTICE 文件中
- 文本 → 手写风格图片
- 支持多字体(最多 20 个)、自定义背景、颜色、间距、边距、扰动等参数
- 智能多字体:重复字符自动切换字体,增强自然感
- 图形化颜色选择器
- 自动加载
fonts/和background/目录下的资源 - 配置保存/加载(YAML 格式)
- 导出 PNG / JPEG(可设质量)
- 可选 GPU 加速(NVIDIA + CUDA)
- CPU:15–20 秒
- GPU(NVIDIA):3–6 秒
少量文本(<500 字)GPU 加速可能因数据传输开销而不如 CPU 快,建议仅用于长文本。
安装与运行(需要先安装 uv)
# 安装依赖
uv sync
# 启动
uv run python src/main.py- 安装对应 CUDA 版本的 CuPy:
# CUDA 12.x
uv add cupy-cuda12x
# CUDA 11.x
uv add cupy-cuda11x- 验证:
uv run python -c "import cupy as cp; print(cp.__version__, cp.cuda.is_available())"程序启动时自动检测 GPU,不可用则回退到 CPU。
- 输入文本
- 配置字体(主字体 + 辅助字体)
- 选背景图(可选)
- 调整参数 → 预览 → 导出
- 可保存/加载配置(YAML)
程序界面分为两个主要区域:
- 左侧预览区域:显示生成的手写效果预览
- 右侧设置区域:
- 文本输入区:输入要转换为手写的文字
- 基础设置:
- 字体选择:点击配置按钮打开字体管理对话框,可添加多个字体文件(最多20个)
- 背景图片:选择用作纸张背景的图片
- 参数设置(标签页形式):
- 间距设置:调整字间距、行间距等
- 边距设置:设置纸张边距
- 扰动设置:控制手写效果的自然随机性
- 导出设置:设置导出图片的格式和质量
- 颜色设置:通过图形化颜色选择器设置字体颜色
- 在文本框中输入要转换为手写的文字
- 点击"字体选择:点击配置"按钮配置字体文件(可选多个)
- 选择背景图片
- 调整各种参数(字间距、行间距、边距等)
- 在颜色设置中通过图形化颜色选择器设置字体颜色
- 在导出设置中选择导出图片的格式(PNG/JPEG)和JPEG质量
- 点击"预览"查看效果
- 点击"导出"将生成的图片保存到您选择的位置
- 可以使用"保存配置"和"载入预设"来保存和加载参数设置
本版本新增了智能多字体应用功能:
- 支持最多20个字体文件的配置
- 字体列表中第一个字体为主字体,用于书写首次出现的字符
- 重复出现的字符会循环使用辅助字体(第二个及之后的字体)
- 例如:如果配置了4个字体[A, B, C, D],其中A为主字体,B、C、D为辅助字体
- 文本中首次出现的"代"字使用字体A
- 第二次出现的"代"字使用字体B
- 第三次出现的"代"字使用字体C
- 第四次出现的"代"字使用字体D
- 第五次出现的"代"字再次使用字体B(循环)
实际感觉有点鸡肋,原本的单字体扰动已经够用了,而且必须找到风格相近的字体才不会突兀。
- 字体列表:用于手写的字体文件(.ttf 或 .otf),第一个为主字体,程序会为重复字符随机应用不同字体
- 背景路径:用作纸张背景的图片
- 各种数值参数控制手写效果的细节
- 字间距、行间距
- 边距设置
- 随机扰动参数
- 导出设置:
- 图片格式:支持PNG、JPEG格式
- 图片质量:设置图片的质量(1-100),仅在JPEG格式下生效
- ico图标来自Google
- background图片来自原仓库


