Сделайте скриншот с помощью скрипта Python. [Linux] - PullRequest
77 голосов
/ 16 сентября 2008

Я хочу сделать скриншот с помощью скрипта Python и ненавязчиво сохранить его.

Меня интересует только решение Linux, и я должен поддерживать любую среду на основе X.

Ответы [ 16 ]

2 голосов
/ 12 мая 2014

Для этого есть пакет python Autopy

Модуль растрового изображения может захватывать экран (bitmap.capture_screen) Это мультиплатформенный (Windows, Linux, Osx).

1 голос
/ 12 февраля 2019

Я недавно написал пакет, который делает снимок экрана с использованием библиотеки X11 и возвращает изображение в виде массива. Я на самом деле использовал некоторые предложения, которые упоминается в этой теме и улучшается на них. Типичная частота кадров 60+ кадров в секунду для разрешения 1080p возможны на современной машине. На самом деле на моем развитии машина (то есть ~ 3 года) мне удалось получить 200 кадров в секунду. вот ссылка на проект https://github.com/mherkazandjian/fastgrab

1 голос
/ 09 августа 2017

Я не смог сделать снимок экрана в Linux с pyscreenshot или scrot, потому что вывод pyscreenshot был просто файлом изображения png черного экрана.

но, слава богу, был еще один очень простой способ сделать скриншот в Linux без установки чего-либо. просто поместите приведенный ниже код в вашу директорию и запустите python demo.py

import os
os.system("gnome-screenshot --file=this_directory.png")

также есть много доступных опций для gnome-screenshot --help

Application Options:
  -c, --clipboard                Send the grab directly to the clipboard
  -w, --window                   Grab a window instead of the entire screen
  -a, --area                     Grab an area of the screen instead of the entire screen
  -b, --include-border           Include the window border with the screenshot
  -B, --remove-border            Remove the window border from the screenshot
  -p, --include-pointer          Include the pointer with the screenshot
  -d, --delay=seconds            Take screenshot after specified delay [in seconds]
  -e, --border-effect=effect     Effect to add to the border (shadow, border, vintage or none)
  -i, --interactive              Interactively set options
  -f, --file=filename            Save screenshot directly to this file
  --version                      Print version information and exit
  --display=DISPLAY              X display to use
1 голос
/ 19 марта 2015

От этой темы :

 import os
 os.system("import -window root temp.png")
0 голосов
/ 12 сентября 2014

Это старый вопрос. Я хотел бы ответить на него, используя новые инструменты.

Работает с python 3 (должен работать с python 2, но я его не тестировал) и PyQt5.

Минимальный рабочий пример. Скопируйте его в оболочку python и получите результат.

from PyQt5.QtWidgets import QApplication
app = QApplication([])
screen = app.primaryScreen()
screenshot = screen.grabWindow(QApplication.desktop().winId())
screenshot.save('/tmp/screenshot.png')
0 голосов
/ 26 ноября 2013

Попробуйте:

#!/usr/bin/python

import gtk.gdk
import time
import random
import socket
import fcntl
import struct
import getpass
import os
import paramiko     

while 1:
    # generate a random time between 120 and 300 sec
    random_time = random.randrange(20,25)
    # wait between 120 and 300 seconds (or between 2 and 5 minutes) 

    print "Next picture in: %.2f minutes" % (float(random_time) / 60)

    time.sleep(random_time)
    w = gtk.gdk.get_default_root_window()   
    sz = w.get_size()
    print "The size of the window is %d x %d" % sz
    pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
    pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
    ts = time.asctime( time.localtime(time.time()) )
    date = time.strftime("%d-%m-%Y")
    timer = time.strftime("%I:%M:%S%p")
    filename = timer
    filename += ".png"

    if (pb != None):
        username = getpass.getuser() #Get username
        newpath = r'screenshots/'+username+'/'+date #screenshot save path
        if not os.path.exists(newpath): os.makedirs(newpath)
        saveas = os.path.join(newpath,filename)
        print saveas
        pb.save(saveas,"png")
    else:
        print "Unable to get the screenshot."
...