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")
# 捕获整个屏幕
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("剪贴板中没有图像数据")
# 从剪贴板获取图像
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")
# 替代方案:先 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)
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()
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()
注意事项
跨平台支持:
- Windows:完全支持。
- macOS:需要额外权限(在
系统设置 > 隐私与安全性 > 屏幕录制
中启用终端或 IDE)。 - Linux:依赖
X11
或Wayland
,可能需要安装scrot
或maim
等工具。
性能优化:
- 频繁截图可能影响系统性能,建议合理设置截图间隔。
图像处理:
- 捕获的图像可以直接用 Pillow 的其他模块(如
ImageFilter
)进行进一步处理。
- 捕获的图像可以直接用 Pillow 的其他模块(如
希望本教程能帮助你快速掌握 ImageGrab
模块的使用!
点我分享笔记