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

Python截图保存教程 - 两种简单高效的截图方法 | Python编程指南

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}")

本教程提供了Python截图保存的两种高效方法。根据您的需求选择Pillow或mss库,开始创建您的屏幕捕获应用吧!

发表评论