首页 > 解决方案 > PIL ImagineGrab 只返回 Mac 上的背景图像,而不是我想的屏幕抓取

问题描述

我正在使用 macOS Big Sur 11.2.3、Python 3.9.4

当我运行以下代码时,我得到一个更新的“打印屏幕”,但是,图像只是背景图像和菜单栏(苹果符号、聚焦应用程序、文件、编辑......)。屏幕上没有出现其他应用程序窗口。

如果我选择不同的应用程序,比如 Safari,菜单栏会发生变化(聚焦的应用程序和菜单项),但图像的其余部分继续只显示背景图像。我正在尝试获取屏幕抓取,就像我在使用类似代码的教程中看到的那样;但是,它可能只是 Windows 的东西,文档似乎另有建议。建议表示赞赏。

import numpy as np
from PIL import ImageGrab
from cv2 import cv2
import time


def screen_record(): 
    last_time = time.time()
    while(True):
        
        printscreen =  np.array(ImageGrab.grab())
        print('loop took {} seconds'.format(time.time()-last_time))
        last_time = time.time()
        cv2.imshow('window',cv2.cvtColor(printscreen, cv2.COLOR_BGR2RGB))
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break

screen_record()

标签: pythonmacospython-imaging-library

解决方案


对我来说,解决方案是让正在执行的应用程序(VSCode、iTerm)抓取屏幕。这在此处被提及并解决

手动修复:

Open SpotlightSystem PreferencesSecurity & PrivacyScreen RecordingClick lock symboladd app that runs the python command (e.g. VSCode, iTerm)

(使用 Big Sur 11.4、Python 3.9.5 测试)


推荐阅读