摘要:代碼獲取設備列表信息獲取設備列表信息超時獲取所有已連接設備根據獲取單個當前設備不存在序號為的設備請檢查連接獲取當前屏幕圖像的字節數據保存圖像字節數據保存當前屏幕對象將當前屏幕圖像數據保存為圖片橫屏尺寸處理發生異常為空
需求部分代碼思路來源于互聯網
之前一直在尋找一種完美的移動設備屏幕流回傳方案,這種嘗試一旦成功即可運用于多種平臺,比如云端測試Portal中對機器設備屏幕的實時監控,再輔以html5強大的特性,可以直接在web上模擬手機操作,達到"遠程監控"的目的,本demo的部分思路來源于互聯網,我嘗試用jython全部重寫了一遍,這種方式實現起來雖然比較"土鱉",但是效果基本可以符合需求,下面是效果圖和代碼清單。
代碼#!/usr/bin/env python # -*- coding:utf-8 -*- # Android_ScreenSream by Archer # Based on Jython,ddmlib #import jar import sys,os sys.path.append(r"C:ddmlib.jar") sys.path.append(r"C:guava17.jar") sys.path.append(r"C: t.jar") from threading import Thread #import lib from java.awt.image import * from java.io import * from javax.imageio import * from com.android.ddmlib import * from time import sleep class AndroidScreenStream(object): def __init__(self): super(AndroidScreenStream,self).__init__() self.devices=[] self.currentdevice=None self.rawimgdata=None self.rawscreen=None def wait_device_lists(self,bridge): """獲取設備列表信息""" count=0 while(bridge.hasInitialDeviceList()==False): try: sleep(0.5) count+=1 except: pass if(count>60): print "獲取設備列表信息超時!" break def get_devices(self): """獲取所有已連接設備""" AndroidDebugBridge.init(False) mybridge=AndroidDebugBridge.createBridge() self.wait_device_lists(mybridge) #get self.devices.append(mybridge.getDevices()) return self def get_device_by_index(self,index): """根據index獲取單個當前設備""" AndroidDebugBridge.init(False) mybridge=AndroidDebugBridge.createBridge() self.wait_device_lists(mybridge) #get try: self.currentdevice=mybridge.getDevices()[index] return self except IndexError: print "不存在序號為"+str(index)+"的設備,請檢查USB連接!" sys.exit() def get_current_screen_imgbyes(self): """獲取當前屏幕圖像的字節數據""" self.rawimgdata=self.currentdevice.getScreenshot().data #保存圖像字節數據 return self def get_current_rawscreen(self): """保存當前屏幕screen對象""" self.rawscreen=self.currentdevice.getScreenshot() return self def save_screen_img(self,path=os.path.join(os.getcwd(),"current_frame.jpeg"),islandscape=False): """將當前屏幕圖像數據保存為圖片""" if self.rawscreen is not None: landscape=islandscape #橫屏尺寸處理 imgwidth=self.rawscreen.height if landscape else self.rawscreen.width imgheight=self.rawscreen.width if landscape else self.rawscreen.height image=BufferedImage(imgwidth,imgheight,BufferedImage.TYPE_INT_RGB) if image.getHeight()!=imgheight or image.getWidth()!=imgwidth: image=BufferedImage(imgwidth,imgheight,BufferedImage.TYPE_INT_RGB) index=0 indexInc=self.rawscreen.bpp>>3 for y in range(self.rawscreen.height): for x in range(self.rawscreen.width): value=self.rawscreen.getARGB(index) if landscape: image.setRGB(y,self.rawscreen.width-x-1,value) else: image.setRGB(x,y,value) index+=indexInc try: ImageIO.write(image,"JPEG",File(path)) except IOError: print "發生異常!" sys.exit() else: print "rawscreen為空!" sys.exit() if __name__=="__main__": ASS=AndroidScreenStream() ShotDevice=ASS.get_device_by_index(0) while True: ShotDevice.get_current_rawscreen().save_screen_img()Github
Android_Screen_Stream
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37413.html
摘要:通過安裝的會提示移除自帶的版本,除非你忽略這個,但同時又會帶來一系列的安裝問題,由于的某些默認會加載,故經常導致的不能啟動問題可以嘗試用一句話解決。查看出錯信息首先通過安裝接著直接,這個時候就可以成功了,順利啟動。 通過brew安裝的python會提示移除mac os自帶的python版本,除非你忽略這個warning,但同時又會帶來一系列package的安裝問題,由于xcode...
摘要:首先是直接通過調用代碼。先寫個代碼文件,它位于盤中,其完整代碼如下該代碼接受兩個命令行參數,然后輸出一個乘法算式。 ??對于一個數據分析方面的工作者來說,最熟悉的語言無疑就是Python了。對于軟件開發者而言,Java又是極其重要的工具。那么,一個很自然的問題就是,我們能夠在Java中調用Python代碼嗎???想要在Java中調用Python代碼,有以下兩個辦法: 直接通過Runt...
摘要:首先是直接通過調用代碼。先寫個代碼文件,它位于盤中,其完整代碼如下該代碼接受兩個命令行參數,然后輸出一個乘法算式。 ??對于一個數據分析方面的工作者來說,最熟悉的語言無疑就是Python了。對于軟件開發者而言,Java又是極其重要的工具。那么,一個很自然的問題就是,我們能夠在Java中調用Python代碼嗎???想要在Java中調用Python代碼,有以下兩個辦法: 直接通過Runt...
摘要:寫東西快但是生態廣比如大數據雖然好但是利用不到的整個的生態的代碼雖然也好但是畢竟有些庫需要自己寫的多雖然也很簡單但是查文檔也很麻煩那么問題來了最簡單的的方式就是直接把打包那么問題又來了打包成挺麻煩的官方文檔看不懂答案有了寫了個包搞這個事情 py 寫東西快 但是java 生態廣 比如大數據 py 雖然好 但是利用不到java的整個的生態的代碼 scala 雖然也好但是畢竟 有些庫 ...
摘要:寫東西快但是生態廣比如大數據雖然好但是利用不到的整個的生態的代碼雖然也好但是畢竟有些庫需要自己寫的多雖然也很簡單但是查文檔也很麻煩那么問題來了最簡單的的方式就是直接把打包那么問題又來了打包成挺麻煩的官方文檔看不懂答案有了寫了個包搞這個事情 py 寫東西快 但是java 生態廣 比如大數據 py 雖然好 但是利用不到java的整個的生態的代碼 scala 雖然也好但是畢竟 有些庫 ...
閱讀 3310·2023-04-25 19:42
閱讀 1329·2021-11-23 10:11
閱讀 2252·2021-11-16 11:51
閱讀 1590·2019-08-30 15:54
閱讀 2036·2019-08-29 18:44
閱讀 1609·2019-08-23 18:24
閱讀 494·2019-08-23 17:52
閱讀 1764·2019-08-23 15:33