Python怎么实现全屏截图并保存为图片

一只小鹿
一只小鹿
发布时间:2026-10-23| 10人浏览过
原创

在 Python 中实现全屏截图并保存为本地图片,核心思路是调用图形系统提供的接口捕获当前屏幕像素缓冲区,随后将其编码并写入目标文件。针对不同应用场景,主流工具有三类:基于图像处理生态的 Pillow (PIL)、专注于桌面自动化控制的 PyAutoGUI,以及面向高性能和多显示器捕获的 mss。本文将按实际操作流程逐一讲解具体实现代码与选择依据。

Python怎么实现全屏截图并保存为图片
图 1:Python 实现全屏截图的通用端到端流程

一、基础准备:安装截图所需的依赖库

Python 核心标准库本身未包含直接截取操作系统桌面的原生模块,因此需要安装成熟的第三方库。根据后续使用的方案,可在终端或命令行窗口中运行以下命令安装:

# 方案一所需:Python 图像处理核心库
pip install pillow

# 方案二所需:自动化控制库(内部依赖 Pillow)
pip install pyautogui

# 方案三所需:轻量极速截图库
pip install mss

二、方案一:使用 Pillow (PIL.ImageGrab) 实现全屏截图

Pillow 是 Python 中最常用的图像处理库。其内置的 ImageGrab 模块提供了直接抓取屏幕像素的方法。该方案代码极其精简,且返回的是原生的 PIL.Image 对象,便于截图后直接进行缩放、裁剪或添加文字标记。

1. 完整代码示例

from PIL import ImageGrab

# 1. 抓取当前全屏画面
screenshot = ImageGrab.grab()

# 2. 保存为本地图片文件
screenshot.save("fullscreen_pillow.png")
print("截图已保存至 fullscreen_pillow.png")

2. 代码关键细节解析

  • ImageGrab.grab() 默认截取主屏幕完整分辨率内容。
  • 保存文件格式由传入文件名的后缀自动推断(如 .png、.jpg、.bmp)。如果保存为 JPG,可通过 screenshot.save("out.jpg", quality=90) 设置压缩质量。
  • 平台兼容性:在 Windows 和 macOS 上表现良好;在 Linux 下,Pillow 依赖系统底层的 X11 会话,需确保已安装系统支持包。

三、方案二:使用 PyAutoGUI 实现快速截屏

PyAutoGUI 是一个跨平台的桌面自动化控制库,常用于编写脚本模拟键鼠动作。它的截屏功能经过高度封装,支持一条语句同时完成“截图并落盘”。

1. 完整代码示例

import pyautogui

# 一步完成:全屏截图并直接写入指定路径
screenshot = pyautogui.screenshot("fullscreen_pyautogui.png")
print("全屏截图已成功保存!")

也可以先获取图像对象,检查或修改后再执行保存:

import pyautogui

# 仅捕获到内存
img = pyautogui.screenshot()

# 执行尺寸检查或后续处理
print(f"屏幕图像分辨率: {img.size}")

# 保存到目标磁盘文件
img.save("fullscreen_custom.png")

四、方案三:使用 mss 实现高性能与多显示器截屏

当需要连续高频截屏、录屏,或在连接了多个显示器的扩展桌面环境下工作时,mss 是性能更强、处理更精准的专业选择。它直接与底层操作系统显示接口对接,开销极低。

1. 完整代码示例

import mss
import mss.tools

with mss.mss() as sct:
    # sct.monitors[0] 代表包含所有屏幕的大全屏(虚拟总桌面)
    # sct.monitors[1] 代表系统第 1 块物理主显示器
    monitor_all = sct.monitors[0]
    
    # 捕获像素数据
    sct_img = sct.grab(monitor_all)
    
    # 使用 mss 内置工具编码为 PNG 并保存
    output_filename = "fullscreen_mss.png"
    mss.tools.to_png(sct_img.rgb, sct_img.size, output=output_filename)
    print(f"多屏虚拟全屏截图已保存为: {output_filename}")
Python怎么实现全屏截图并保存为图片
图 2:三种全屏截图方案的定位、特点与技术选型对照

五、跨平台底层原理与运行环境适配

全屏截图的底层实际上是操作系统显存读取权限的博弈。不同的操作系统在图形管线、权限控制机制及分辨率缩放上差异显著,了解这些原理有助于快速定位截图异常。

Python怎么实现全屏截图并保存为图片
图 3:不同操作系统下的截图调用路径与底层制约因素

六、高频注意事项与排查技巧

1. Windows 高分屏 (DPI 缩放) 截图不全问题

在 Windows 10/11 系统中,若显示缩放比例设置高于 100%(如 125% 或 150%),运行部分截图脚本可能出现“只截取到了屏幕左上方一部分”或“图像尺寸小于实际物理分辨率”的现象。这是因为 Python 进程默认未启用 DPI 感知(DPI Unaware)。可在脚本头部显式开启 DPI 感知:

import sys

if sys.platform == "win32":
    import ctypes
    # 启用系统 Per-Monitor DPI 感知
    try:
        ctypes.windll.shcore.SetProcessDpiAwareness(2)
    except Exception:
        ctypes.windll.user32.SetProcessDPIAware()

2. macOS “屏幕录制” 隐私权限

macOS 从 Catalina (10.15) 开始引入了严格的安全限制。如果运行 Python 脚本的终端(Terminal、iTerm2)或 IDE(VS Code、PyCharm)未获得“屏幕录制”权限,截图接口可能不会报错,但保存出来的图片将是一张只有桌面壁纸、没有任何窗口内容的空图。解决方法:前往“系统设置 -> 隐私与安全性 -> 屏幕录制”,勾选当前使用的终端或 Python 解释器。

3. 输出图片体积控制与格式选择

  • PNG 格式(推荐):无损压缩,文字、线条和界面 UI 图标边缘锐利清晰,适合作为教程配图或日志留档。
  • JPG 格式:有损压缩,文件体积显著减小。若全屏画面色彩丰富(如游戏截图),保存为 JPG 能显著减轻存储与传输负担:
    # 保存为 JPG 需注意转换为 RGB 模式(避免 PNG 携带的透明通道导致报错)
    rgb_img = screenshot.convert("RGB")
    rgb_img.save("screen.jpg", format="JPEG", quality=85)

七、方案总结与选型导图

针对“全屏截图并保存为图片”这一具体需求,总结如下决策思路:

Python怎么实现全屏截图并保存为图片
图 4:全屏截图方案选择与问题排查速查指南

综上所述,如果只是需要快速写几行脚本将当前屏幕保存为文件,Pillow 或 PyAutoGUI 是最便捷的选择;而在面对复杂的自动化系统或多显示器工作站时,结合 mss 并配合 DPI 与系统权限设置,能保证全屏截图稳定且高效地执行。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。