Skip to content

SYSTEM-MEMZ-XEK/HandWrite-CPP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 

Repository files navigation

HandWrite - 手写体文本生成器

这是 HandWrite 项目的 C++ 移植版本,提供更快的渲染性能和更小的内存占用。

C++17 Qt6 CMake License: MIT

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/binbuild/Release 目录下。

注意:程序运行时会在可执行文件所在目录下寻找 ttf_library 文件夹,用于存放 TTF 字体文件。请确保该文件夹存在且包含至少一个 .ttf 字体。

使用说明

  1. 准备字体:在程序所在目录创建 ttf_library 文件夹,放入你喜欢的 .ttf 字体文件。
  2. 运行程序:启动 HandWrite 可执行文件。
  3. 输入文本:在右侧文本框中输入要生成的文字(支持中文和英文)。
  4. 调整参数:根据需要修改纸张大小、字体、间距、颜色、扰动强度等。
  5. 预览:点击 预览 按钮,左侧将显示第一页的渲染效果,下方可切换页面。
  6. 字符级覆盖:选中文本,点击 设置 按钮,可对该段文字单独设定属性(字体大小、偏移、旋转、颜色)。
  7. 导出:点击 导出 按钮,所有页面将保存为 PNG 图片到 outputs 文件夹。
  8. 打印:点击 打印 按钮可直接打印当前预览内容。

键盘快捷键

  • / 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.05

📁 项目结构

HandWrite/
├── 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 联系。


About

HandWrite - 一个基于 C++/Qt6 的手写体文本生成器。将普通文本转换为逼真的手写图像,支持多页、并行渲染、字符级属性覆盖和丰富的参数调节。完美生成手写作业、笔记、信件等个性化文档。

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors