Python图像库无法捕获整个屏幕
我正在使用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%”
这样会让文本和图标变得更小,但更清晰。