python截图代码(Linux+Windows)

本文介绍在Linux和Windows环境下使用Python进行全屏及指定窗口截图的方法。包括使用gtk、PyQt4、PIL等库实现的功能代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux环境下

可以参考这个示例:http://stackoverflow.com/questions/69645/take-a-screenshot-via-a-python-script-linux

  • 这个是使用gtk库
import gtk.gdk

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])
if (pb != None):
    pb.save("screenshot.png","png")
    print "Screenshot saved to screenshot.png."
else:
    print "Unable to get the screenshot."


  • 这是使用PyQt4库的截图代码,也可以在windows下使用
import sys
from PyQt4.QtGui import QPixmap, QApplication
app = QApplication(sys.argv)
QPixmap.grabWindow(QApplication.desktop().winId()).save('test.png', 'png')

Windows环境下

import ImageGrab
img = ImageGrab.grab()
img.save('test.jpg','JPEG')
以上代码都是全屏截图的。下面介绍一下窗口截图的操作,暂时只有windows下的,linux的X11还要研究一下。
windows窗口有句柄的概念,通过句柄,我们可以知道这个句柄指向的窗口大小,位置等坐标信息。那么使用PIL中的ImageGrab库或Qt的QPixmap类都可以获取这个范围内的图像。前提是需要截图的部分在窗口最顶层,可以直接看到。
原理就是这些了,下面给一个示例,也是从网上找出来并修改的:
Qt版本:
# -*- coding: cp936 -*-
import sys
import os
import ctypes
from PyQt4.QtGui import QPixmap, QApplication
#构造RECT结构体
class RECT(ctypes.Structure):
    _fields_ = [('left', ctypes.c_long),
                ('top', ctypes.c_long),
                ('right', ctypes.c_long),
                ('bottom', ctypes.c_long)]
    def __str__(self):
        return str((self.left, self.top, self.right, self.bottom))
app = QApplication(sys.argv)
HWND = ctypes.windll.user32.FindWindowA(None, "window title")
if HWND == None:
    print "找不到窗口"
    quit()
QPixmap.grabWindow(HWND).save('c:/test.png', 'png')
PIL版本:
 
# -*- coding: cp936 -*-
import ctypes
import ImageGrab
#构造RECT结构体
class RECT(ctypes.Structure):
    _fields_ = [('left', ctypes.c_long),
                ('top', ctypes.c_long),
                ('right', ctypes.c_long),
                ('bottom', ctypes.c_long)]
    def __str__(self):
        return str((self.left, self.top, self.right, self.bottom))

HWND = ctypes.windll.user32.FindWindowA(None, "window title")
print HWND
if HWND == 0:
    print "找不到窗口"
    quit()
rect =RECT()
ctypes.windll.user32.GetWindowRect(HWND,ctypes.byref(rect))
#去掉状态栏
rangle = (rect.left+2,rect.top+2,rect.right-2,rect.bottom-2)
im = ImageGrab.grab(rangle)
im.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值