当前位置: 首页 > news >正文

Python 3个实现屏幕截图工具的方法

屏幕截图是日常工作和自动化任务中的常见需求。Python提供了多种实现屏幕截图的方法,本文将介绍三种实用的实现方式,包括使用方法、适用场景和完整代码示例。

方法一:使用PIL(Pillow)库实现基础截图

场景介绍

适合简单的单次截图需求,如快速保存当前屏幕状态、制作操作教程配图等。这是最轻量级的解决方案。

使用方法

1、安装Pillow库: pip install Pillow

2、运行脚本即可完成截图

3、截图将保存为当前目录下的 screenshot.jpg

代码示例

from PIL import ImageGrab import datetime def take_screenshot(): # 捕获整个屏幕 screenshot = ImageGrab.grab() # 生成带时间戳的文件名 timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"screenshot_{timestamp}.jpg" # 保存截图 screenshot.save(filename, "JPEG") print(f"截图已保存为: {filename}") if __name__ == "__main__": take_screenshot()

方法二:使用pyautogui实现定时连续截图

场景介绍

适合需要连续监控的场景,如软件演示录制、系统监控、自动化测试过程记录等。

使用方法

1、安装pyautogui: pip install pyautogui

2、运行脚本并输入截图间隔时间(秒)和总时长(分钟)

3、截图将自动保存在创建的 screenshots 文件夹中

代码示例

import pyautogui import time import os from datetime import datetime def continuous_screenshot(interval=5, duration_minutes=1): """ 连续截图功能 interval: 截图间隔(秒) duration_minutes: 总持续时间(分钟) """ # 创建保存目录 if not os.path.exists("screenshots"): os.makedirs("screenshots") total_seconds = duration_minutes * 60 screenshot_count = total_seconds // interval print(f"开始连续截图,共{screenshot_count}张,间隔{interval}秒") for i in range(screenshot_count): # 捕获屏幕 screenshot = pyautogui.screenshot() # 生成文件名 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"screenshots/screenshot_{timestamp}_{i+1}.png" # 保存截图 screenshot.save(filename) print(f"已保存第{i+1}张截图: {filename}") # 等待指定间隔 time.sleep(interval) print("连续截图完成!") if __name__ == "__main__": interval = int(input("请输入截图间隔(秒): ")) duration = int(input("请输入截图持续时间(分钟): ")) continuous_screenshot(interval, duration)

方法三:使用mss库实现高性能截图

场景介绍

适合需要高性能截图的场景,如游戏录制、实时监控、视频处理等对截图速度要求较高的应用。

使用方法

1、安装mss库: pip install mss

2、运行脚本选择截图模式(单次/连续)

3、截图将保存为PNG格式,支持多显示器配置

代码示例

import mss import mss.tools import time from datetime import datetime def high_performance_screenshot(mode='single', monitor_num=1, interval=1, count=10): """ 高性能截图工具 mode: 'single'单次截图, 'continuous'连续截图 monitor_num: 显示器编号(从1开始) interval: 连续截图间隔(秒) count: 连续截图数量 """ with mss.mss() as sct: # 获取所有显示器信息 monitors = sct.monitors if monitor_num > len(monitors): print(f"错误:只有{len(monitors)}个显示器") return # 选择指定的显示器 monitor = monitors[monitor_num - 1] if mode == 'single': # 单次截图 screenshot = sct.grab(monitor) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"highres_screenshot_{timestamp}.png" mss.tools.to_png(screenshot.rgb, screenshot.size, output=filename) print(f"高清截图已保存: {filename}") elif mode == 'continuous': # 连续截图 print(f"开始高性能连续截图,共{count}张") for i in range(count): screenshot = sct.grab(monitor) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S_%f") filename = f"highres_screenshot_{timestamp}_{i+1}.png" mss.tools.to_png(screenshot.rgb, screenshot.size, output=filename) print(f"已保存第{i+1}张高清截图") if i < count - 1: # 最后一张不需要等待 time.sleep(interval) print("高性能连续截图完成!") if __name__ == "__main__": print("选择截图模式:") print("1 - 单次截图") print("2 - 连续截图") choice = input("请输入选择(1或2): ") if choice == '1': monitor_num = int(input("请输入显示器编号(默认为1): ") or "1") high_performance_screenshot('single', monitor_num) elif choice == '2': monitor_num = int(input("请输入显示器编号(默认为1): ") or "1") interval = float(input("请输入截图间隔(秒): ")) count = int(input("请输入截图数量: ")) high_performance_screenshot('continuous', monitor_num, interval, count)

根据具体需求选择合适的截图方法,可以大大提高工作效率。三种方法各有优势,建议根据实际场景灵活选择。

方法优点缺点适用场景
PIL库简单轻量,依赖少功能相对基础简单单次截图
pyautogui功能丰富,易于使用性能一般常规自动化任务
mss库高性能,支持多显示器安装稍复杂高性能需求场景

“无他,惟手熟尔”!有需要的用起来!关注「Nicholas与Pypi」获取更多Python实战!

http://www.jsqmd.com/news/1119278/

相关文章:

  • 聊聊Google Play上架:新号需要走的12人连测14天该怎么操作
  • 27届二本!简历主项目烂大街,立刻放弃主攻开发岗
  • Claude Code 记忆系统的边界感,CLAUDE.md 和 auto memory 怎样分工
  • 【监控与可观测性】03-ELK日志体系搭建:从采集到告警的完整闭环
  • 【Camera】Monocular vs Stereo Calibration
  • 【TwinCAT3实战教程】项目交付前的最后一步:六大核心配置与避坑指南
  • Dell笔记本散热控制终极指南:3步实现专业级风扇管理
  • 智驾人才跨界具身智能:是降维打击还是水土不服?深度技术复盘与工程落地
  • Linux TCP网络编程深度精讲,三次握手、四次挥手、TCP状态流转、粘包拆包、套接字参数、全套服务端客户端实战与工程解决方案
  • Prompt Engineering进阶指南:从提示词工程到AI Agent工作流编排
  • 7自由度开源机械臂OpenArm 2.0:从实验室到生产环境的完整实战指南
  • Codex 卡在 Reconnecting 5/5?手把手带您排查修复
  • 电子合同选型7大盲区,企业必看避坑指南
  • 【中小学AI人工智能教育】声音分类——提琴分类:快速定义项目类型实例
  • 2FA 方案的认证架构对比:本地存储、云同步、端到端加密
  • 2026年第三方物流服务商横向对比:专业3PL与普通物流公司的五大差异——上海心泾国际物流 vs 市场主流服务商
  • 智慧农业技术深耕:从单点赋能到全产业链升级,重构农业生产底层模式
  • RK3588芯片架构解析与硬件设计实践
  • AUTOSAR CP Watchdog 原理与运行机制
  • 针对 Zth(t) 数据和积分结构函数数据的完整 C# 处理方案 包括反卷积(时间常数谱提取)、Foster 模型拟合、Foster → Cauer 转换 以及结构函数生成
  • 国际化办公必备:一站式多语言实时会议转写工具解析
  • 保时捷明确:永远不会有纯电911,保时捷想干嘛?
  • 三、03 OTA-BootLoader前置-flash擦除写入-跳转函数编写
  • 从“能用”到“稳准快”:ChatGPT自定义指令的4阶成熟度模型(附27个真实业务场景指令模板库)
  • Cursor、Claude、OpenAI 的二次验证怎么开?AI 编程工具安全对比
  • macOS星露谷物语SMAPI启动问题:从诊断到修复的完整指南
  • 不只看细胞比例:PCF80如何补充淋巴结转移研究的空间信息
  • 2026年AI简历优化工具深度横评:Jobscan、AI简历姬、鹅来面3款实测+选型指南
  • AI拍书讲解+同步视频+智能批改+错题整理——一个APP完成暑期预习全流程
  • 【本地AI安全防护实战指南:5个漏洞+一键加固方案(Ollama篇)】