Python图像库无法捕获整个屏幕

5 投票
2 回答
6079 浏览
提问于 2025-04-18 10:47

我正在使用PIL来截屏,但它只捕捉到了屏幕的一部分。

这是我桌面的截图

而这个是程序捕捉到的内容

你可以看到,屏幕的一侧和底部有很多空间被截掉了。我尝试通过调整捕捉区域的大小来修正这个问题,但结果只是多出来的地方变成了黑色。

我在想,这个库可能对最大分辨率有个限制,但我找不到相关的文档说明这一点。

下面是我的代码

import ImageGrab
import os
import time


def screenGrab():
    box = (0, 0, 1920, 1080)
    im = ImageGrab.grab(box)
    im.save(os.getcwd() + '\\screenshot_' + str(int(time.time())) + '.png', 'PNG')


def main():
    screenGrab()

if __name__ == '__main__':
    main()

有没有人知道怎么解决这个问题,或者知道为什么会这样?

2 个回答

11

有一个可行的解决办法,不需要去调整操作系统的设置。这个方法是使用下面的代码,让你的程序在Windows上能够识别DPI(每英寸点数):

from ctypes import windll
user32 = windll.user32
user32.SetProcessDPIAware()

希望这个对你有帮助

10

今天早些时候我也遇到了这个问题。我的脚本只能捕捉到从(0,0)到(1536,864)的像素。我最近换了Windows 8,发现一些程序的显示分辨率似乎不对。经过一番搜索,我找到了解决办法。

  • 首先,找到你的Python安装目录(对我来说是c:/python27/)
  • 右键点击python.exe,选择“属性”
  • 切换到“兼容性”选项卡
  • 点击“更改所有用户的设置”按钮
  • 勾选“在高DPI设置下禁用显示缩放”这个选项
  • 这样,ImageGrab就能捕捉到整个分辨率了

如果我找到一个通用的解决办法会更新,但我觉得在这里分享一下,因为我搜索了大约一个小时也没找到解决方案。

编辑:

通用解决办法

  • 右键点击桌面
  • 选择“屏幕分辨率”
  • 点击“使文本和其他项目更大或更小”
  • 勾选“让我为所有显示器选择一个缩放级别”
  • 选择“更小 - 100%”

这样会让文本和图标变得更小,但更清晰。

撰写回答