Pillow ImageGrab 模块

ImageGrab 允许用户捕获屏幕或指定区域的图像,并将其保存为图像文件或进行进一步处理。

ImageGrab 模块适用于自动化测试、屏幕录制辅助、图像识别等场景。

导入方法:

from PIL import ImageGrab

ImageGrab 核心方法

下表列出了 ImageGrab 模块的主要方法及其说明:

方法 描述 参数 返回值
ImageGrab.grab() 捕获整个屏幕或指定区域的图像 bbox(可选):指定截图区域的元组 (x1, y1, x2, y2),默认全屏 PIL.Image 对象
ImageGrab.grabclipboard() 从系统剪贴板获取图像 PIL.Image 对象(如果剪贴板有图像),否则 None
ImageGrab.grab_to_file() 捕获屏幕并直接保存到文件(已弃用,建议使用 grab().save() filename:保存的文件路径

方法详细说明

ImageGrab.grab()

功能
捕获屏幕或指定区域的图像。

参数

  • bbox(可选):一个四元组 (x1, y1, x2, y2),定义截图区域。默认捕获整个屏幕。

示例代码

实例

from PIL import ImageGrab

# 捕获整个屏幕
screenshot = ImageGrab.grab()
screenshot.save("full_screen.png")

# 捕获指定区域(左上角 (100, 100) 到右下角 (500, 500))
partial_screenshot = ImageGrab.grab(bbox=(100, 100, 500, 500))
partial_screenshot.save("partial_screen.png")

ImageGrab.grabclipboard()

功能
从系统剪贴板获取图像数据(如截图后按 Ctrl+C 复制的图像)。

返回值

  • 如果剪贴板中有图像,则返回 PIL.Image 对象。
  • 否则返回 None

示例代码

实例

from PIL import ImageGrab

# 从剪贴板获取图像
clipboard_image = ImageGrab.grabclipboard()

if clipboard_image:
    clipboard_image.save("clipboard_image.png")
else:
    print("剪贴板中没有图像数据")

ImageGrab.grab_to_file()(已弃用)

注意
该方法在较新版本的 Pillow 中已被弃用,推荐使用 grab().save() 替代。

示例替代代码

实例

from PIL import ImageGrab

# 替代方案:先 grab() 再 save()
screenshot = ImageGrab.grab()
screenshot.save("screenshot.png")

实际应用示例

定时截图工具

实例

import time
from PIL import ImageGrab

# 每隔 5 秒截图一次,共 3 次
for i in range(3):
    screenshot = ImageGrab.grab()
    screenshot.save(f"screenshot_{i+1}.png")
    time.sleep(5)

结合 OpenCV 进行实时屏幕分析

实例

import numpy as np
from PIL import ImageGrab
import cv2

# 实时捕获屏幕并显示
while True:
    screenshot = ImageGrab.grab()
    img_np = np.array(screenshot)  # 转换为 NumPy 数组
    cv2.imshow("Screen Capture", cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR))
   
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按 'q' 退出
        break

cv2.destroyAllWindows()

注意事项

  1. 跨平台支持

    • Windows:完全支持。
    • macOS:需要额外权限(在 系统设置 > 隐私与安全性 > 屏幕录制 中启用终端或 IDE)。
    • Linux:依赖 X11Wayland,可能需要安装 scrotmaim 等工具。
  2. 性能优化

    • 频繁截图可能影响系统性能,建议合理设置截图间隔。
  3. 图像处理

    • 捕获的图像可以直接用 Pillow 的其他模块(如 ImageFilter)进行进一步处理。

希望本教程能帮助你快速掌握 ImageGrab 模块的使用!