ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

linux下python抓屏实现方法

linux下python抓屏实现方法 在linux系统里要实现抓屏的功能, 具体该用哪些方法。更新时间为二零一五年五月二十二日, 下午两点四十三分三十二秒, 作者:这篇文章的核心内容是在向各位介绍一种在Linux操作系统环境当中去达成屏幕截图目标的具体实现方案, 其中还牵扯到了与操作屏幕、进行图像截取相关的一系列小技巧, 所以说, 如果有朋友们对此类信息比较感兴趣或者有需要的话, 那么不妨把这篇文章拿来作为一个参考的依据。在这一篇里, 我们详细地讲解了一种在Linux系统当中进行屏幕捕获的具体操作方法, 现在把相关的内容分享出来给大家做个参考, 具体的实现过程是通过代码来完成的代码如下:#!/usr/bin/pythonby zevolo, 2012.12.20import gtk.gdkimport gtkimport glibclass MyRect():def __init__(self, x 0, y 0, w 0, h 0):self.x xself.y yself.w wself.h hdef __init__(self, x, y):self.x min(int(x.x), int(y.x))self.y min(int(x.y), int(y.y))self.w abs(int(y.x - x.x))self.h abs(int(y.y - x.y))class MyPair():def __init__(self, x 0, y 0):self.x xself.y yclass MyPoint(MyPair):def __init__(self, x 0, y 0):MyPair.__init__(self, x, y)class MySize(MyPair):def __init__(self, w 0, h 0):MyPair.__init__(self, x, y)class MyCapture():(event_enter, event_leave) (0, 1)def __init__(self):passdef capture(self):passdef handleEvent(self, event):if event event_enter:enterSnap()elif event event_leave:leaveSnap()def enterSnap(self):passdef leaveSnap(self):passdef snap(self, window None, rect None, name None):passclass MyCaptureGtk(MyCapture):def __init__(self):MyCapture.__init__(self)self.window gtk.Window()self.window.set_default_size(1,1)self.window.connect(button-press-event, self.button_press_cb)self.first Noneself.second Noneself.window.show()#self.window.set_events(gtk.gdk.BUTTON_PRESS_MASK)def getWindow(self):return self.windowdef button_press_cb(self, widget, event):#print type is %d % event.typeif event.type gtk.gdk.BUTTON_PRESS:if event.button 1: #left buttonprint (%d, %d), (%d, %d), button is %d % (event.x_root, event.y_root, event.x, event.y, event.button)if not self.first:self.first MyPoint(event.x_root, event.y_root)else:self.second MyPoint(event.x_root, event.y_root)self.snap(None, MyRect(self.first, self.second))self.first Noneelif event.button 3: #right buttonself.uncapture()else:passdef uncapture(self):if self.first:print cancelself.first Noneelse:print exit nowgtk.gdk.pointer_ungrab()gtk.mainquit()def capture(self, time 0L):cursor gtk.gdk.Cursor(gtk.gdk.display_get_default(), gtk.gdk.CROSSHAIR)ret gtk.gdk.pointer_grab(self.window.window, True,gtk.gdk.BUTTON_PRESS_MASK,None, cursor, time)if ret gtk.gdk.GRAB_SUCCESS:print left button start, end, right button cancel/exitelse:print failed to capture %d, (viewable %d),(frozen %d), (already %d) \% (ret, gtk.gdk.GRAB_NOT_VIEWABLE, gtk.gdk.GRAB_FROZEN, gtk.gdk.GRAB_ALREADY_GRABBED)def snap(self, window None, rect None, name None):w windowif not window:#w gtk.gdk.get_default_root_window()d gtk.gdk.display_get_default()w d.get_default_screen().get_root_window()r rectif not r:sz w.get_size()r MyRect(0, 0, sz[0], sz[1])print The size of the window is (%d, %d, %d, %d) % (r.x, r.y, r.w, r.h)n nameif not n:n screenshot.pngbuf gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8, r.w, r.h)buf buf.get_from_drawable(w,w.get_colormap(), r.x, r.y, 0, 0, r.w, r.h)if (buf ! None):buf.save(n, png)print Screenshot saved to %s. % nelse:print Unable to get the screenshot.def timeout(data):#print timeoutdata.capture()if __name__ __main__:cap MyCaptureGtk()w cap.getWindow()w.show()glib.timeout_add_seconds(1, timeout, cap)#cap.snap()gtk.main()我们真心期盼这篇文章里边所提到的一切, 能够给大家在开展程序设计工作的过程中, 带来一些实实在在的帮助与益处。
返回列表