这是 HandWrite 项目的 C++ 移植版本,提供更快的渲染性能和更小的内存占用。
HandWrite 是一个基于 C++ 和 Qt6 的手写体文本生成器。它能够将普通文本渲染成带有自然扰动的手写风格图像,非常适合生成手写作业、笔记、信件等个性化文档。通过丰富的参数调节和字符级属性覆盖,你可以精确控制每一页的外观。
- 真实手写效果 – 对字体大小、间距、位置和旋转添加高斯扰动,模拟真实手写的不规则性。
- 灵活的参数配置 – 支持纸张尺寸、页边距、行间距、字间距、字体颜色、背景颜色、分辨率等自定义。
- 多页支持 – 自动分页,并提供翻页导航和键盘快捷键(←/→/Home/End)。
- 并行渲染 – 利用 QtConcurrent 多线程加速多页生成,可自由设置线程数。
- 字符级覆盖 – 选中任意文本,单独设置其字体大小、偏移、旋转角度或颜色,实现高亮、错位等效果。
- 配置文件 – 使用 TOML 格式保存/加载所有参数,方便复用。
- 打印与导出 – 直接打印生成的页面,或导出为 PNG 图片(支持高倍率分辨率)。
- 生僻字检测 – 自动检测当前字体不支持的字符并给出提示。
- 跨平台 – 可在 Windows、macOS、Linux 上编译运行(基于 Qt6)。
- C++17 编译器(GCC 9+ / Clang 10+ / MSVC 2019+)
- Qt6(Core, Gui, Widgets, Concurrent, PrintSupport)
- CMake 3.16+
git clone https://github.com/yourname/HandWrite.git
cd HandWrite
mkdir build && cd build
cmake .. -DCMAKE_PREFIX_PATH=/path/to/qt6 # 根据实际 Qt 安装路径调整
cmake --build . --config Release构建完成后,可执行文件将位于 build/bin 或 build/Release 目录下。
注意:程序运行时会在可执行文件所在目录下寻找
ttf_library文件夹,用于存放 TTF 字体文件。请确保该文件夹存在且包含至少一个.ttf字体。
- 准备字体:在程序所在目录创建
ttf_library文件夹,放入你喜欢的.ttf字体文件。 - 运行程序:启动
HandWrite可执行文件。 - 输入文本:在右侧文本框中输入要生成的文字(支持中文和英文)。
- 调整参数:根据需要修改纸张大小、字体、间距、颜色、扰动强度等。
- 预览:点击 预览 按钮,左侧将显示第一页的渲染效果,下方可切换页面。
- 字符级覆盖:选中文本,点击 设置 按钮,可对该段文字单独设定属性(字体大小、偏移、旋转、颜色)。
- 导出:点击 导出 按钮,所有页面将保存为 PNG 图片到
outputs文件夹。 - 打印:点击 打印 按钮可直接打印当前预览内容。
←/PageUp:上一页→/PageDown:下一页Home:第一页End:最后一页Ctrl+ 滚轮:放大/缩小预览
| 参数 | 描述 |
|---|---|
| 纸张模板 | 预定义的纸张尺寸(A4、Letter、B5 等)或自定义 |
| 分辨率 | 输出图像的放大倍率(x1 ~ x64),越高越清晰但生成更慢 |
| 字体 | 从 ttf_library 中选择字体 |
| 字号 | 基础字体大小(像素) |
| 行距 | 行与行之间的间距(像素) |
| 字距 | 字符之间的额外间距(像素) |
| 页边距 | 上、下、左、右边距(像素) |
| 字体颜色 | 字符颜色(预定义颜色) |
| 背景颜色 | 纸张背景色(预定义颜色) |
| 扰动参数 | 对行距、字号、字距、横向偏移、纵向偏移、旋转施加的高斯噪声标准差,值越大越随意 |
程序使用 TOML 格式保存/加载参数。示例:
# HandWrite Configuration File
# Generated by HandWrite-CPP
width = 667
height = 945
ttf_selector = "/path/to/ttf_library/yourfont.ttf"
font_size = 30
line_spacing = 70
char_distance = 1
margin_top = 10
margin_bottom = 10
margin_left = 10
margin_right = 10
char_color = [0, 0, 0, 255]
background_color = [0, 0, 0, 0]
resolution = 4
line_spacing_sigma = 1.0
font_size_sigma = 1.0
word_spacing_sigma = 1.0
perturb_x_sigma = 1.0
perturb_y_sigma = 1.0
perturb_theta_sigma = 0.05HandWrite/
├── CMakeLists.txt # CMake 构建脚本
├── src/ # 源代码
│ ├── config.cpp/hpp # 配置解析器
│ ├── tools.cpp/hpp # 工具类(颜色、字体、纸张模板)
│ ├── core.cpp/hpp # 核心生成引擎
│ ├── mainwindow.cpp/hpp # 主窗口
│ └── main.cpp # 程序入口
├── ui/ # Qt Designer UI 文件
│ └── mainwindow.ui
├── resources/ # 资源文件(图标等)
│ └── app.ico # Windows 图标
└── README.md
欢迎提交 Issue 或 Pull Request!如有任何问题或建议,请通过 GitHub 联系。