Python - screenshot with PIL

本文介绍如何在Windows7系统中使用Python进行桌面截图。首先需要安装Python包管理工具并利用pip安装PIL库,接着下载VCForPython27以支持PIL编译。最后通过Python脚本调用PIL库的ImageGrab模块实现截图功能。

Platform
Windows 7 x86

Prepare
Download python package management tool, and install PIL with pip.

wget.exe https://bootstrap.pypa.io/get-pip.py
C:\Python27\python.exe get-pip.py

Install VCForPython27, and the package will be used during PIL cimpile. Download PIL package, compile PIL and Install it on localhost.

C:\Python27\Scripts\pip.exe install PIL --allow-external PIL --allow-unverified PIL

Screenshot desktop.

PS C:\Users\nfs> C:\Python27\python.exe
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from PIL import ImageGrab
>>> im = ImageGrab.grab()
>>> im.save("C:/Users/nfs/Desktop/screenshot.png")
>>> im.close()

screenshot with PIL

### 解决 `pyautogui.screenshot()` 出现 `OSError: screen grab failed` 的问题 当使用 `pyautogui.screenshot()` 进行屏幕截图时,可能会遇到 `OSError: screen grab failed` 错误。这种错误通常由以下几个原因引起: #### 1. **依赖库缺失** `pyautogui` 的截图功能依赖于底层的图像处理工具,例如 PIL (Pillow) 或者其他平台特定的库。如果这些依赖未正确安装,则可能导致此错误。 解决方案是在安装 `pyautogui` 同时确保 Pillow 已经正确安装[^2]: ```bash pip install pillow pyautogui ``` #### 2. **权限不足** 某些操作系统可能需要管理员权限才能访问屏幕内容。如果没有足够的权限运行脚本,也可能引发此类错误。 可以在终端中以管理员身份重新启动 Python 脚本或者 IDE 来测试是否有改善[^4]: ```bash sudo python your_script.py ``` #### 3. **后台运行程序冲突** 在 Windows 平台上,有时由于系统安全软件或其他后台进程干扰,也会导致无法成功抓取屏幕。尝试关闭不必要的后台应用程序后再执行代码。 另外,在虚拟环境中运行时也有可能因为缺少图形界面支持而导致失败。可以考虑切换至物理机而非远程桌面连接来解决问题[^1]。 #### 4. **多显示器配置下的特殊行为** 对于拥有多个显示屏的情况,默认调用 `pyautogui.screenshot()` 可能试图捕捉所有显示设备上的画面数据;然而并非所有的实现都完全兼容这样的操作模式。因此建议指定具体的捕获区域作为替代方案之一[^4]: 修改后的代码如下所示: ```python import pyautogui # 获取主显示器尺寸大小 screen_width, screen_height = pyautogui.size() try: # 设置固定的截图范围只针对当前活动的主要监视器部分像素点采集 screenshot = pyautogui.screenshot(region=(0, 0, screen_width, screen_height)) screenshot.save("screenshot.png") except Exception as e: print(f"Error occurred while taking the screenshot: {e}") ``` 通过以上调整应该能够有效缓解甚至彻底消除之前提到的那个异常状况的发生几率。 --- ### 提供一段改进版示例代码用于调试目的 为了更方便排查具体是什么环节出了差错,这里给出一个带有异常处理机制的小型实用版本以便进一步分析定位潜在隐患所在之处: ```python from pathlib import Path import traceback import pyautogui def capture_screenshot(output_path=".", filename_prefix="screenshot"): output_dir = Path(output_path) if not output_dir.exists(): try: output_dir.mkdir(parents=True) except PermissionError: raise ValueError( f"No permission to create directory at '{output_dir}'. Please choose another path." ) filepath = ( output_dir / f"{filename_prefix}_{pyautogui.datetime.now().strftime('%Y%m%d_%H%M%S')}.png" ) try: img = pyautogui.screenshot() img.save(str(filepath.resolve())) return str(filepath.relative_to(Path.cwd())) except OSError as os_err: error_details = "".join(traceback.format_exception(None, os_err, os_err.__traceback__)) with open("error_log.txt", "w") as log_file: log_file.write(error_details) raise RuntimeError("Failed capturing screenshot due to an operating system level issue.") from None if __name__ == "__main__": result = capture_screenshot("./screenshots/") print(result) ``` 上述脚本不仅实现了基本的功能需求而且还增加了日志记录能力以及更加友好的用户体验提示信息等功能特性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值