没有PIL的Python windows 7截图

时间:2011-01-03 23:00:14

标签: python image windows-7 screenshot

我想使用python进行截图。

我尝试过使用PIL,但由于我使用64位窗口而python PIL不起作用(我只能找到32位PIL版本)。我顺便使用python 2.7.1。

我想截取屏幕截图,只要它的速度每秒可以超过1秒,这并不重要。最好还应该能够裁剪截屏的区域,但这并不是最重要的。

主要问题似乎是我在64位运行,很多东西似乎与此不相容。如果可能的话,我真的不想回到32位。 有没有可以做到这一点的程序或模块?

3 个答案:

答案 0 :(得分:33)

http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil获取win-amd64-py2.7的PIL。

from PIL import ImageGrab
im = ImageGrab.grab()
im.save('screenshot.png')

更新:使用pywin32(http://sourceforge.net/projects/pywin32/)而不是PIL来截取多个虚拟屏幕:

import win32gui, win32ui, win32con, win32api
hwin = win32gui.GetDesktopWindow()
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc)
memdc = srcdc.CreateCompatibleDC()
bmp = win32ui.CreateBitmap()
bmp.CreateCompatibleBitmap(srcdc, width, height)
memdc.SelectObject(bmp)
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
bmp.SaveBitmapFile(memdc, 'screenshot.bmp')

答案 1 :(得分:1)

32位或64位Windows在这里无关紧要;这是Python及其模块的“重要性”。如果您运行的是32位编译的Python,那么32位编译的PIL在64位Windows上运行得很好。

另一方面,如果您运行的是64位编译的Python,则需要查找或自定义编译64位编译版本的PIL才能匹配。

修改

您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载64位编译的PIL版本 - 具体来说,您需要PIL-1.1.7.win-amd64-py2.7.exe

答案 2 :(得分:1)

我在PIL或pyscreenshot上遇到了同样的问题,这就是我解决它的方法。

右键单击python.exe,“属性”,“兼容性”选项卡,选中“在高DPI设置上禁用显示缩放”。重复pythonw.exe。