使用Python设计一款远程屏幕监控软件,在需要监控的电脑上运行该程序,该程序不断的截屏,并将屏幕数据压缩处理(提高网络传输速度),发送到网络 redis中缓存,监控程序可以从redis服务中读取最新的屏幕截图并展现。
本地全屏截屏代码:
#本地全屏幕截图 im = ImageGrab.grab() #图像尺寸(宽,高)元组 size = im.size #发本地截图转换为字节串进行发送 #imageBytes = im.tobytes() buf = BytesIO() im.save(buf, 'jpeg' ,quality=20) buf_str = buf.getvalue()
我们可以将redis操作进行封装,代码如下:
class Cache: def __init__(self,host='wanmait的redis服务器',password='万码学堂redis服务密码'): pool = redis.ConnectionPool(host=host,password=password) self.conn = redis.Redis(connection_pool=pool) def set(self,key,value): self.conn.set(key,value) def get(self,key): return self.conn.get(key) def insertImage(self,key,frame): b = pickle.dumps(frame) self.conn.set(key,b) def getImage(self,key): return pickle.loads(self.conn.get(key)) cache = Cache()
全部代码如下:
import pickle import redis import socket import struct from PIL import ImageGrab import traceback import gzip import random from time import sleep from io import BytesIO class Cache: def __init__(self,host='wanmait的redis服务器',password='万码学堂redis服务密码'): pool = redis.ConnectionPool(host=host,password=password) self.conn = redis.Redis(connection_pool=pool) def set(self,key,value): self.conn.set(key,value) def get(self,key): return self.conn.get(key) def insertImage(self,key,frame): b = pickle.dumps(frame) self.conn.set(key,b) def getImage(self,key): return pickle.loads(self.conn.get(key)) cache = Cache() def putScreen(): #本地全屏幕截图 im = ImageGrab.grab() #图像尺寸(宽,高)元组 size = im.size #发本地截图转换为字节串进行发送 #imageBytes = im.tobytes() buf = BytesIO() im.save(buf, 'jpeg' ,quality=20) buf_str = buf.getvalue() imageBytes = gzip.compress(buf_str) cache.insertImage("wanmait_com_screen",imageBytes) cache.set("wanmait_size_w","%d"%size[0]) cache.set("wanmait_size_h","%d"%size[1]) print("发送一次数据:%d" % len(imageBytes)) if __name__=='__main__': while True: try: putScreen() except Exception as e: print('发送数据异常') pass sleep(3)#每隔3秒发送一次截屏
0条评论
点击登录参与评论