使用Python在Windows上获取屏幕截图?

Zac*_*own 38 python windows screenshot

我正在创建Beta测试人员报告模块,以便他们可以发送我的软件评论,但我希望可以选择在报告中包含屏幕截图.如何在Windows上使用Python截取屏幕截图?我在Linux上找到了几个例子,但在Windows上没有多少运气.

Sep*_*ero 25

值得注意的是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)
Run Code Online (Sandbox Code Playgroud)

  • app = wx.App()否则你可能得到:wx._core.PyNoAppError:必须首先创建wx.App对象!另外,从这里下载wxPython:http://wxpython.org/download.php由于某种原因,如果你只是做"pip install wx",那就不一样了"wx" (5认同)
  • @Sepero:您将如何获得多个显示器? (2认同)

Tig*_*222 13

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

from mss import mss

with mss() as sct:
    sct.shot()
Run Code Online (Sandbox Code Playgroud)

然后找到screenshot.png包含第一台显示器屏幕截图的文件.有很多可能的自定义,你可以玩ScreenShot对象和OpenCV/Numpy/PIL /等.

  • 在 https://python-mss.readthedocs.io/en/dev/examples.html 中查看更多示例 (2认同)
  • @AdrianKeister:好的链接是 https://python-mss.readthedocs.io/en/latest/examples.html ;你会找到答案:) (2认同)

小智 13

这可以通过以下方式完成PIL.首先,安装它,然后你可以采取这样的完整截图:

import PIL.ImageGrab

im = PIL.ImageGrab.grab()
im.show()
Run Code Online (Sandbox Code Playgroud)

  • PIL.ImageGrab 仅适用于 Windows 和 OS X。Linux 下 ImageGrab 的替代方案是 pyscreenshot (2认同)

CPS*_*ore 5

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

 pygame.image.save(Surface, filename)
Run Code Online (Sandbox Code Playgroud)

其中“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"))
Run Code Online (Sandbox Code Playgroud)

这会将“表面”Surface 上的所有内容保存到用户的桌面上,如 pic.png

  • 据我所知,Pygame是平台独立的。此代码只会截取 pygame 屏幕,并且仅截取 pygame 屏幕。如果您的屏幕跨越 2 个显示器,我认为它能够(尽管我无法测试这一点)。希望这可以帮助! (2认同)

小智 5

您可以使用ImageGrab模块。ImageGrab可在Windows和macOS上运行,并且需要PIL(枕头)才能使用它。这是一个小例子:

from PIL import ImageGrab
snapshot = ImageGrab.grab()
save_path = "C:\\Users\\YourUser\\Desktop\\MySnapshot.jpg"
snapshot.save(save_path)
Run Code Online (Sandbox Code Playgroud)


Zai*_* E. 5

对于pyautogui用户:

import pyautogui
screenshot = pyautogui.screenshot()
Run Code Online (Sandbox Code Playgroud)

  • pyautogui.screenshot('filename.png') (2认同)