基于PyAutoGUI的自动化截图标注工具(系统工具 + 图形界面操作 + 多平台支持)



背景介绍

在日常办公、教学、开发调试等场景中,我们经常需要对屏幕内容进行截图,并在截图上添加文字说明、图形标记等,以便于后续的分享、记录或分析。然而,手动操作截图和标注不仅耗时,还容易出错。为了解决这一问题,我们开发了一个基于PyAutoGUI的自动化截图标注工具,通过简单的命令行交互,实现屏幕截图的自动截取、标注与保存。

本工具结合了 PyAutoGUI(用于屏幕截图与鼠标控制)和 Pillow(用于图像处理),能够实现对屏幕指定区域的截图,并在指定位置添加文字标注。项目支持 Windows、macOS 和 Linux 等主流操作系统,适合对自动化脚本和GUI操作感兴趣的开发者学习和实践。


思路分析

1. 技术选型

  • PyAutoGUI:用于模拟鼠标和键盘操作,实现屏幕截图。
  • Pillow(PIL):用于图像处理,包括添加文字、绘制图形等。
  • Python 3.x:作为开发语言,具备良好的跨平台支持。
  • 命令行交互:通过 input() 函数或 argparse 接收用户输入,实现灵活配置。

2. 功能模块划分

  • 截图模块:使用 pyautogui.screenshot() 截取指定区域。
  • 标注模块:使用 PIL.ImageDraw.Draw() 添加文字或图形。
  • 保存模块:将原始截图和标注后的图片分别保存。
  • 用户交互模块:通过命令行输入参数,控制截图区域、标注内容和输出路径。

3. 实现流程

  1. 用户输入截图区域的左上角和右下角坐标;
  2. 用户输入标注文字内容及文字位置;
  3. 工具自动截取指定区域;
  4. 使用Pillow对截图进行标注;
  5. 保存原始截图和标注后的图片。

代码实现

以下为完整实现代码,包含详细的注释说明。

1. 安装依赖

在运行代码之前,请确保已安装以下库:

pip install pyautogui pillow

2. 示例代码(main.py)

import pyautogui
from PIL import Image, ImageDraw, ImageFont
import os

def capture_and_annotate(top_left, bottom_right, text, text_pos, output_path):
    """
    截图指定区域并添加文字标注
    :param top_left: 截图区域左上角坐标 (x, y)
    :param bottom_right: 截图区域右下角坐标 (x, y)
    :param text: 要标注的文字内容
    :param text_pos: 文字位置 (x, y)
    :param output_path: 保存路径
    """
    # 截图指定区域
    screenshot = pyautogui.screenshot(region=(top_left[0], top_left[1], 
                                               bottom_right[0] - top_left[0], 
                                               bottom_right[1] - top_left[1]))
    print(f"截图区域:{top_left} -> {bottom_right}")

    # 保存原始截图
    original_path = output_path.replace(".png", "_original.png")
    screenshot.save(original_path)
    print(f"原始截图已保存至:{original_path}")

    # 创建绘图对象
    draw = ImageDraw.Draw(screenshot)
    font = ImageFont.load_default()

    # 绘制标注文字
    draw.text(text_pos, text, fill="red", font=font)

    # 保存带标注的截图
    screenshot.save(output_path)
    print(f"标注截图已保存至:{output_path}")

if __name__ == "__main__":
    print("欢迎使用自动化截图标注工具!")
    print("请输入以下信息进行截图与标注:")

    # 输入区域坐标
    top_left_input = input("请输入截图区域左上角坐标(x, y):")
    top_left = tuple(map(int, top_left_input.split(',')))

    bottom_right_input = input("请输入截图区域右下角坐标(x, y):")
    bottom_right = tuple(map(int, bottom_right_input.split(',')))

    # 输入标注内容
    text = input("请输入标注文字内容:")

    # 输入文字位置
    text_pos_input = input("请输入标注文字位置(x, y):")
    text_pos = tuple(map(int, text_pos_input.split(',')))

    # 输入保存路径
    output_path = input("请输入保存路径(如:./screenshot_annotated.png):")

    # 执行截图与标注
    capture_and_annotate(top_left, bottom_right, text, text_pos, output_path)

3. 示例运行

输入示例:

欢迎使用自动化截图标注工具!
请输入以下信息进行截图与标注:
请输入截图区域左上角坐标(x, y):100, 100
请输入截图区域右下角坐标(x, y):500, 500
请输入标注文字内容:这是示例区域
请输入标注文字位置(x, y):300, 300
请输入保存路径(如:./screenshot_annotated.png):./screenshot_annotated.png

输出示例:

截图区域:(100, 100) -> (500, 500)
原始截图已保存至:./screenshot_annotated_original.png
标注截图已保存至:./screenshot_annotated.png

学习价值

本项目结合了 PyAutoGUIPillow,帮助开发者掌握以下核心技术点:

  • GUI自动化操作:通过PyAutoGUI实现屏幕截图、鼠标控制等操作。
  • 图像处理:使用Pillow对图像进行文字添加、保存等处理。
  • 跨平台兼容性:代码可在Windows、macOS、Linux上运行,具备良好的可移植性。
  • 命令行交互:通过 input() 函数接收用户输入,实现灵活配置。
  • 自动化工具设计:为后续开发更复杂的自动化脚本或图形界面工具打下基础。

扩展建议

为了提升工具的实用性,可以考虑以下扩展方向:

  1. 图形界面版本:使用 tkinterPyQt5 构建图形界面,提供更直观的操作方式。
  2. 图形标注支持:添加绘制矩形、圆形、箭头等图形的功能。
  3. 图像识别辅助:结合 pyautogui.locateOnScreen() 自动识别目标区域。
  4. 批量处理:支持从配置文件中读取多个截图任务。
  5. 导出为PDF:将多个截图合并为一个PDF文档。

总结

本项目是一个适合中级以下开发者实践的自动化截图标注工具,结合PyAutoGUI与Pillow库,实现屏幕截图的自动获取与标注。通过本项目,开发者可以深入理解Python在GUI自动化和图像处理方面的应用,为后续开发更复杂的自动化工具或图形界面应用打下坚实基础。无论是教学、办公还是自动化测试,这个工具都能提供极大的便利。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注