用Python获取Windows屏幕截图?

我正在创build一个Betatesting人员报告模块,以便他们可以发送他们对我的软件的评论,但是我希望可以select在报告中包含屏幕截图。 我如何在Windows上使用Python进行屏幕截图? 我在Linux上发现了几个例子,但在Windows上没有太多的运气。

值得注意的是,ImageGrab只适用于MSWindows。

为了跨平台兼容性,一个人可能最好使用wxPython库。 http://wiki.wxpython.org/WorkingWithImages#A_Flexible_Screen_Capture_App

import wx wx.App() # Need to create an App instance before doing anything screen = wx.ScreenDC() size = screen.GetSize() bmp = wx.EmptyBitmap(size[0], size[1]) mem = wx.MemoryDC(bmp) mem.Blit(0, 0, size[0], size[1], screen, 0, 0) del mem # Release bitmap bmp.SaveFile('screenshot.png', wx.BITMAP_TYPE_PNG) 

一个简单的截图方法是通过Pygame。

  pygame.image.save(Surface, filename) 

其中“表面”是您正在截取的表面,“文件名”是保存图像的文件路径,名称和类型。

您可以导出为BMP,TGA,PNG或JPEG。 截至Pygame 1.8,PNG和JPEG也有效。

如果没有指定文件扩展名,它将默认为一个.TGA文件。

你甚至可以使用'os'库来保存到特定的文件目录。

一个例子:

 import os import pygame surface = pygame.display.set_mode((100, 100), 0, 32) surface.fill((255, 255, 255)) pygame.draw.circle(surface, (0, 0, 0), (10, 10), 15, 0) pygame.display.update() pygame.image.save(surface, os.path.expanduser("~/Desktop/pic.png")) 

这将“表面”表面上的任何东西都保存在用户的桌面上,如pic.png

MSS模块是另一种非常快速的方法。 它与其他解决方案不同之处在于它只使用ctypes标准模块,因此不需要很大的依赖关系。 它独立于操作系统,使用起来非常简单:

 from mss import mss with mss() as sct: sct.shot() 

只需找到包含第一台显示器屏幕screenshot.png文件。 有很多可能的定制,你可以玩ScreenShot对象和OpenCV / Numpy / PIL /等。

您可以使用ImageGrab模块。 ImageGrab只能在Windows上运行,而且你需要PIL (Pillow)来使用它。 这是一个小例子:

 import ImageGrab snapshot = ImageGrab.grab() save_path = "C:\\Users\\YourUser\\Desktop\\MySnapshot.jpg" snapshot.save(save_path)