批量图片加文字工具 (Image Text Adder)
功能
本工具使用 Python 和 Tkinter GUI 实现,旨在方便用户批量为一张固定的背景图片添加具有指定样式的文字。
- 选择背景图: 用户可以选择一张图片作为所有输出图片的背景。
- 批量添加文字: 支持在文本框输入多行文字,每一行文字将生成一张独立的图片。
- 自定义样式:
- 字体选择: 用户可以指定 TrueType (
.ttf) 或 OpenType (.otf) 字体文件。 - 字体大小: 自定义文字的大小。
- 文字颜色: 通过颜色选择器选取颜色。
- 加粗与斜体: 可选加粗和斜体效果(效果依赖于所选字体是否包含对应变体)。
- 字体选择: 用户可以指定 TrueType (
- 定位与换行:
- 绘制位置: 指定文字绘制区域的左上角坐标 (X, Y)。
- 绘制宽度: 指定文字绘制的最大宽度,超出部分将自动换行。
- 输出设置: 用户可以选择保存生成图片的文件夹。
- 跨平台: 基于 Python 和 Tkinter,理论上可在 Windows, macOS, Linux 运行。
- 打包运行: 可使用 PyInstaller 等工具打包成独立的可执行文件 (
.exe),方便无 Python 环境的用户使用。
如何使用
- 运行程序: 直接运行 Python 脚本 (
python image_text_adder.py) 或打包后的.exe文件。 - 选择背景图片: 点击 "选择背景图片" 按钮,选择一张图片文件。
- 输入文字: 在 "输入文字 (每行一个)" 的文本框中输入文字,一行代表一张输出图片。
- 选择输出目录: 点击 "选择输出目录" 按钮,选择一个用于保存结果图片的文件夹。
- 设置样式:
- 点击 "选择字体文件" 选择
.ttf或.otf字体。 - 在 "字号" 输入框中输入数字。
- 点击 "选择颜色" 按钮选择文字颜色。
- 勾选 "加粗" 或 "斜体" 复选框(可选)。
- 点击 "选择字体文件" 选择
- 设置位置和宽度:
- 输入文字区域左上角的 X 和 Y 坐标。
- 输入文字区域的最大宽度(像素)。
- 开始生成: 点击 "开始生成" 按钮。
- 查看结果: 程序处理完成后,会提示成功信息。前往指定的输出目录查看生成的图片。
创作过程简述
- 需求分析: 理解核心需求:固定背景、批量文字、自定义样式(字体、大小、颜色、粗斜体)、自动换行、GUI 操作、EXE 打包、README 生成。
- 技术选型:
- GUI: 选择 Python 内置的
Tkinter库,简单易用,无需额外安装(除 Pillow 外)。使用tkinter.ttk改善视觉效果。 - 图像处理: 选择强大的
Pillow(PIL fork) 库,用于打开、绘制文字、保存图片。 - 打包: 计划使用
PyInstaller将脚本打包成.exe。 - 文件/目录操作: 使用 Python 内置的
os模块。
- GUI: 选择 Python 内置的
- GUI 设计: 规划界面布局,包括文件/目录选择、文本输入、样式选项(字体、颜色、大小、粗斜体)、位置/宽度输入、执行按钮和状态显示区域。
- 核心逻辑实现 (Pillow):
- 加载背景图。
- 加载字体文件 (
ImageFont.truetype)。尝试根据用户选择的粗体/斜体选项查找字体变体文件(例如font-bold.ttf)。如果找不到,则回退到基础字体。 - 实现文本换行逻辑:利用
ImageDraw.textbbox()(或textlength在旧版 Pillow) 测量文本宽度,结合textwrap模块或手动分割,确保文字在指定宽度内换行。 - 在图片上绘制处理后的文字 (
ImageDraw.Draw.text)。 - 保存生成的新图片。
- Tkinter 界面编码:
- 创建主窗口和各个控件 (Label, Button, Entry, Text, Checkbutton)。
- 使用
grid布局管理器排布控件。 - 编写按钮的回调函数,连接 GUI 操作与后端逻辑(文件选择、颜色选择、执行生成)。
- 添加输入验证和错误处理(如检查路径、数字输入)。
- 添加状态更新,告知用户当前进度或结果。
- README 生成: 编写一个函数,在程序启动时将预定义的 Markdown 内容写入
README.md文件。 - 打包配置 (PyInstaller): 准备
pyinstaller命令,可能需要--add-data来包含字体文件(如果需要捆绑默认字体)或图标。命令示例:pyinstaller --onefile --windowed --name ImageTextAdder --icon=app.ico image_text_adder.py - 测试与优化: 在不同情况下测试功能,修复 bug,优化用户体验。例如,禁用 "开始生成" 按钮直到所有必要信息都已输入。