我正在创建一个Beta测试人员报告模块,以便他们可以发送对我的软件的评论,但我想在报告中包括一个截图选项。如何使用Python在Windows上对屏幕进行截图?我在Linux上找到了一些示例,但在Windows上没有太多运气。
我正在创建一个Beta测试人员报告模块,以便他们可以发送对我的软件的评论,但我想在报告中包括一个截图选项。如何使用Python在Windows上对屏幕进行截图?我在Linux上找到了一些示例,但在Windows上没有太多运气。
另一种非常快的方法是使用MSS模块。 它与其他解决方案不同之处在于它仅使用ctypes
标准模块,因此不需要大型依赖项。 它是操作系统无关的,并且使用起来非常容易:
from mss import mss
with mss() as sct:
sct.shot()
只需查找包含第一个监视器屏幕截图的screenshot.png
文件。有许多可能的自定义选项,您可以使用ScreenShot
对象和OpenCV / Numpy / PIL等进行操作。
值得注意的是,ImageGrab 只在 MSWindows 上可用。
为了跨平台兼容性,最好使用 wxPython 库。 http://wiki.wxpython.org/WorkingWithImages#A_Flexible_Screen_Capture_App
import wx
app = wx.App() # Need to create an App instance before doing anything
screen = wx.ScreenDC()
size = screen.GetSize()
bmp = wx.Bitmap(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)
这可以通过PIL
实现。首先,安装它,然后你可以像这样进行全屏截图:
import PIL.ImageGrab
im = PIL.ImageGrab.grab()
im.show()
你可以使用ImageGrab模块。ImageGrab适用于Windows和macOS,您需要PIL(Pillow)来使用它。这里是一个简单的例子:
from PIL import ImageGrab
snapshot = ImageGrab.grab()
save_path = "C:\\Users\\YourUser\\Desktop\\MySnapshot.jpg"
snapshot.save(save_path)
对于使用pyautogui的用户:
import pyautogui
screenshot = pyautogui.screenshot()
pygame.image.save(Surface, filename)
'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
import pyautogui
s = pyautogui.screenshot()
s.save(r'C:\\Users\\NAME\\Pictures\\s.png')
import wx
print(wx.version())
app=wx.App() # Need to create an App instance before doing anything
dc=wx.Display.GetCount()
print(dc)
#e(0)
displays = (wx.Display(i) for i in range(wx.Display.GetCount()))
sizes = [display.GetGeometry().GetSize() for display in displays]
for (i,s) in enumerate(sizes):
print("Monitor{} size is {}".format(i,s))
screen = wx.ScreenDC()
#pprint(dir(screen))
size = screen.GetSize()
print("Width = {}".format(size[0]))
print("Heigh = {}".format(size[1]))
width=size[0]
height=size[1]
x,y,w,h =putty_rect
bmp = wx.Bitmap(w,h)
mem = wx.MemoryDC(bmp)
for i in range(98):
if 1:
#1-st display:
#pprint(putty_rect)
#e(0)
mem.Blit(-x,-y,w+x,h+y, screen, 0,0)
if 0:
#2-nd display:
mem.Blit(0, 0, x,y, screen, width,0)
#e(0)
if 0:
#3-rd display:
mem.Blit(0, 0, width, height, screen, width*2,0)
bmp.SaveFile(os.path.join(home,"image_%s.jpg" % i), wx.BITMAP_TYPE_JPEG)
print (i)
sleep(0.2)
del mem
细节在这里
首先,使用pip3安装PrtSc库。
import PrtSc.PrtSc as Screen
screenshot=PrtSc.PrtSc(True,'filename.png')