2010-05-17 24 views
26

Bir Beta Testers raporlama modülü oluşturuyorum, böylece yazılımımda kendi yorumlarına gönderebiliyorlar, ancak rapor ile bir ekran görüntüsü ekleme seçeneğine sahip olmak istiyorum. Windows'da Python ile ekranın ekran görüntüsünü nasıl alabilirim? Linux'ta birkaç örnek buldum, ancak Windows'da fazla şans olmadı.Python ile Windows'ta ekran görüntüsünü alın?

+1

Bu seferki benim için çalıştı // stackoverflow. com/sorular/4589206/python-windows-7-ekran-olmadan-pil'lik – User

cevap

19

ImageGrab'ın yalnızca MSWindows üzerinde çalıştığına dikkat çekmeye değer.

çapraz platform uyumluluğu, bir kişi wxPython kütüphanesi kullanarak kapalı iyi olabilir. 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) 
+0

AttributeError: 'modülü' nesne aksi takdirde alabilirsiniz hiçbir özelliği 'ni App' –

+3

uygulama = wx.App() vardır: wx._core.PyNoAppError: Önce wx.App nesnesi oluşturulmalıdır! Ayrıca buradan wxPython indirmek: http://wxpython.org/download.php sadece –

+0

CLI pencereler boş – olekb

3

Ekran görüntüsü almak için basit bir yolu pygame geçer. 'Surface' Eğer bir ekran görüntüsünü ve 'dosya' alıyor yüzeyi

pygame.image.save(Surface, filename) 

Eğer thew görüntüyü kaydetmek dosya yolu, adını ve türüdür.

Sen BMP, TGA, PNG veya JPEG gibi dışa aktarabilirsiniz

. Pygame 1.8'den itibaren, PNG ve JPEG de çalışıyor.

hiçbir dosya uzantısı belirtilmemişse bir .TGA dosyaya varsayılan olur.

Hatta belirli dosya dizinleri kaydetmek için 'os' kitaplığını kullanabilirsiniz.

Bir örnek:

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")) 

Bu

+0

İki soru: 1. Pygame platformu bağımsız mı? 2. Çoklu monitör ekran görüntüsü alabilir misiniz? –

+1

Bildiğim kadarıyla, Pygame platform bağımsızdır. Bu kod sadece pygame ekranını ve sadece pygame ekranını görüntüler.Ekranınız 2 monitöre yayılıyorsa, bunun mümkün olabileceğini düşünebilirim (ancak bunu test edemiyorum). Bu yardımcı olur umarım! – CPSuperstore

0

Sen ImageGrab modülünü kullanabilirsiniz pic.png olarak kullanıcının masaüstüne 'yüzey' Yüzey üzerinde bir şey kazandırır. ImageGrab sadece Windows üzerinde çalışır ve kullanmak için PIL (Yastık) gerekir.

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

gerçekten hızlı bir diğer yaklaşım MSS modüldür: Burada biraz örnektir. Diğer çözümlerden sadece ctypes standart modülünü kullandığı için farklıdır, dolayısıyla büyük bağımlılıklar gerektirmez. Bu işletim sistemi bağımsız ve kullanımı kolay oluşur:

from mss import mss 

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

Ve tıpkı ilk monitörün ekran görüntüsünü içeren screenshot.png dosyayı bulmak. Possibile özelleştirmelerin bir yeri vardır, pyautogui kullanıcıları için vb ScreenShot nesneleri ve OpenCV/Numpy/PIL/..

+1

https://python-mss.readthedocs.io/en/dev/examples.html – tal

+0

@tal adresindeki diğer örnekleri inceleyin. Güncelleme yapabilir misiniz lütfen? –

+0

@ Tiger-222: Birden fazla monitörü nasıl alırsınız? –

0

ile oynayabilir: http:

import pyautogui 
screenshot = pyautogui.screenshot() 
İlgili konular