Я создаю модуль отчетности бета-тестеров, чтобы они могли отправлять свои комментарии на мое программное обеспечение, но я хотел бы иметь возможность включить скриншот с отчетом. Как сделать снимок экрана с помощью Python в Windows? Я нашел несколько примеров в Linux, но не имел большой удачи в Windows.Получить скриншот на Windows с Python?
ответ
Стоит отметить, что 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)
AttributeError: объект 'module' не имеет атрибута 'App' –
app = wx.App() в противном случае вы можете получить: wx._core.PyNoAppError: Сначала нужно создать объект wx.App! Кроме того, скачайте wxPython здесь: http://wxpython.org/download.php По какой-то причине это не то же самое «wx», если вы просто делаете «pip install wx» –
Окно CLI выходит пустым – olekb
Простой способ сделать скриншот через 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
Два вопроса: 1. Независимо от платформы pygame? 2. Можете ли вы получить скриншот с несколькими мониторами? –
Насколько я знаю, Pygame - платформа независимая. Этот код будет только снижать экран pygame и только экран pygame.Если ваш экран охватывает два монитора, я думаю, что он сможет (хотя я не могу это проверить). Надеюсь это поможет! – CPSuperstore
Вы можете использовать модуль ImageGrab. ImageGrab работает только в Windows, и вам нужно PIL (Pillow), чтобы использовать его. Вот небольшой пример:
import ImageGrab
snapshot = ImageGrab.grab()
save_path = "C:\\Users\\YourUser\\Desktop\\MySnapshot.jpg"
snapshot.save(save_path)
Другой подход, который действительно быстро является MSS модуль. Он отличается от других решений тем, что использует только стандартный модуль ctypes
, поэтому он не требует больших зависимостей. Это OS независим и его использование легко:
from mss import mss
with mss() as sct:
sct.shot()
И просто найти файл, содержащий screenshot.png
снимок экрана первого монитора. Есть много possibile настроек, вы можете играть с ScreenShot
объектами и OpenCV/Numpy/PIL/и т.д ..
см. Больше примеров в https://python-mss.readthedocs.io/en/dev/examples.html – tal
@tal: Ваша ссылка устарела. Не могли бы вы обновить? –
@ Tiger-222: Как бы вы получили несколько мониторов? –
Для пользователей pyautogui:
import pyautogui
screenshot = pyautogui.screenshot()
Это один работал для меня: HTTP: // StackOverflow. com/questions/4589206/python-windows-7-screenshot-without-pil – User