上一篇
Python截图保存教程 - 两种简单高效的截图方法 | Python编程指南
- Python
- 2025-08-16
- 658
Python截图保存教程
学习两种简单高效的方法进行屏幕截图并保存为图像文件
为什么需要Python截图功能?
Python截图功能在多种场景中非常有用:
- 自动化测试中捕获屏幕状态
- 创建软件操作教程或文档
- 监控系统状态并定期截图存档
- 开发远程桌面应用
- 创建屏幕录制工具
本教程将介绍两种高效的方法:使用Pillow库和mss库。
方法一:使用Pillow库(跨平台)
Pillow是Python图像处理的标准库,支持Windows、macOS和Linux系统。
安装Pillow
pip install Pillow
完整截图代码示例
from PIL import ImageGrab
# 捕获整个屏幕
screenshot = ImageGrab.grab()
# 保存截图
screenshot.save("full_screenshot.png")
print("截图已保存为 full_screenshot.png")
捕获特定区域
from PIL import ImageGrab
# 定义捕获区域:(左上角x, 左上角y, 右下角x, 右下角y)
bbox = (100, 100, 800, 600)
# 捕获指定区域
screenshot = ImageGrab.grab(bbox=bbox)
# 保存截图
screenshot.save("region_screenshot.jpg", "JPEG")
优点:
- 简单易用,适合基本需求
- 跨平台支持
- 与Pillow图像处理功能无缝集成
方法二:使用mss库(高性能)
mss(Multi Screen Shot)库是专门为截图设计的高性能库,速度比Pillow更快。
安装mss
pip install mss
完整截图代码示例
import mss
with mss.mss() as sct:
# 获取所有显示器信息
monitors = sct.monitors
# 捕获第一个显示器
monitor = monitors[1]
# 截图
screenshot = sct.grab(monitor)
# 保存为PNG文件
mss.tools.to_png(screenshot.rgb, screenshot.size, output="monitor1.png")
print("主显示器截图已保存")
多显示器支持
import mss
with mss.mss() as sct:
# 获取所有显示器
for i, monitor in enumerate(sct.monitors[1:], 1):
# 截图
screenshot = sct.grab(monitor)
# 保存
filename = f"monitor_{i}.png"
mss.tools.to_png(screenshot.rgb, screenshot.size, output=filename)
print(f"显示器 {i} 截图已保存为 {filename}")
优点:
- 高性能,特别适合频繁截图
- 原生支持多显示器
- 更灵活的区域选择
两种方法对比
| 特性 | Pillow | mss |
|---|---|---|
| 速度 | 中等 | 快 |
| 多显示器支持 | 有限 | 优秀 |
| 安装大小 | 较大 | 较小 |
| 学习曲线 | 简单 | 中等 |
| 图像处理能力 | 强大 | 基础 |
选择建议:
- 基本需求:选择Pillow,简单易用
- 高性能需求:选择mss,特别是需要频繁截图时
- 多显示器环境:mss是更好的选择
- 需要图像处理:Pillow提供更全面的图像处理功能
进阶技巧
定时截图功能
import time
import mss
def capture_screenshots(interval=5, duration=30):
end_time = time.time() + duration
count = 1
with mss.mss() as sct:
monitor = sct.monitors[1]
while time.time() < end_time:
screenshot = sct.grab(monitor)
filename = f"screenshot_{count}.png"
mss.tools.to_png(screenshot.rgb, screenshot.size, output=filename)
print(f"截图 {count} 已保存")
count += 1
time.sleep(interval)
# 每5秒截图一次,持续30秒
capture_screenshots(interval=5, duration=30)
带时间戳的截图
from datetime import datetime
from PIL import ImageGrab
# 获取当前时间作为文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"screenshot_{timestamp}.png"
# 截图并保存
ImageGrab.grab().save(filename)
print(f"截图已保存为 {filename}")
本文由GongKaiNa于2025-08-16发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://521pj.cn/20258256.html
发表评论