Android MonkeyImage到二进制
我正在实现使用Android MonkeyImage拍摄Emulator的屏幕截图。 捕获的数据通过TCPSocket发送到Ruby脚本,并尝试将其保存为jpg图像。 但是我不知道如何用Ruby将发送的字符串数据转换成二进制。 代码如下Android MonkeyImage到二进制,android,ruby,sockets,android-emulator,monkeyrunner,Android,Ruby,Sockets,Android Emulator,Monkeyrunner,我正在实现使用Android MonkeyImage拍摄Emulator的屏幕截图。 捕获的数据通过TCPSocket发送到Ruby脚本,并尝试将其保存为jpg图像。 但是我不知道如何用Ruby将发送的字符串数据转换成二进制。 代码如下 [client.py] from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage import socket import sys import base64 s
[client.py]
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
import socket
import sys
import base64
server_address = ('localhost', 9898)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_address)
device = MonkeyRunner.waitForConnection(60 , "emulator-5554")
while True:
sc = device.takeSnapshot().convertToBytes("jpg")
size = str(len(sc)).zfill(16)
sock.sendall(size)
sock.sendall(sc)
print >>sys.stderr, 'sended'
sock.close()
[server.rb]
#!/usr/bin/ruby
# coding: utf-8
require "socket"
s0 = TCPServer.open(9898)
sock = s0.accept
count = 0
loop do
size = sock.recv(16).to_i
image = sock.recv(size)
File.open("/Users/taicsuzu/Downloads/ss4/test"+count.to_s+".jpg", "wb") do |file|
#file.write(image.unpack("B*"))[0]
#file.write(image)
#file.write(image.encode("BINARY"))
end
p image
count += 1
end
sock.close
s0.close
"\xFF\xD8\xFF\xDB\x00C\x00\ ...
结果如下
[client.py]
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
import socket
import sys
import base64
server_address = ('localhost', 9898)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_address)
device = MonkeyRunner.waitForConnection(60 , "emulator-5554")
while True:
sc = device.takeSnapshot().convertToBytes("jpg")
size = str(len(sc)).zfill(16)
sock.sendall(size)
sock.sendall(sc)
print >>sys.stderr, 'sended'
sock.close()
[server.rb]
#!/usr/bin/ruby
# coding: utf-8
require "socket"
s0 = TCPServer.open(9898)
sock = s0.accept
count = 0
loop do
size = sock.recv(16).to_i
image = sock.recv(size)
File.open("/Users/taicsuzu/Downloads/ss4/test"+count.to_s+".jpg", "wb") do |file|
#file.write(image.unpack("B*"))[0]
#file.write(image)
#file.write(image.encode("BINARY"))
end
p image
count += 1
end
sock.close
s0.close
"\xFF\xD8\xFF\xDB\x00C\x00\ ...
如何将ascii字符串数据转换为图像二进制?
注释掉的行(file.write()…)不工作,生成无效图像或黑色图像。
谢谢你的帮助 您可以通过dump
命令行实用程序或使用culebra
生成的python脚本来获取屏幕截图
首先,命令行
$ dump -Df ~/tmp/sc1.png
dump
没有将屏幕截图保存为JPEG的选项,因为它们通常保存为PNG(但可能是一个不错的添加)
另一方面,通过culebra
自动生成的python脚本,我通过JPEG手动编辑PNG
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2016 Diego Torres Milano
Created on 2016-09-03 by Culebra v11.5.11
__ __ __ __
/ \ / \ / \ / \
____________________/ __\/ __\/ __\/ __\_____________________________
___________________/ /__/ /__/ /__/ /________________________________
| / \ / \ / \ / \ \___
|/ \_/ \_/ \_/ \ o \
\_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''
import re
import sys
import os
from com.dtmilano.android.viewclient import ViewClient
TAG = 'CULEBRA'
_s = 5
_v = '--verbose' in sys.argv
kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}
vc = ViewClient(device, serialno, **kwargs2)
#vc.dump(window='-1') # FIXME: seems not needed
vc.dump(window=-1)
vc.writeImageToFile('/tmp/${serialno}-${focusedwindowname}-${timestamp}.jpg', 'JPEG', None, False, False)
您可以通过dump
命令行实用程序或使用culebra
生成的python脚本来获取屏幕截图
首先,命令行
$ dump -Df ~/tmp/sc1.png
dump
没有将屏幕截图保存为JPEG的选项,因为它们通常保存为PNG(但可能是一个不错的添加)
另一方面,通过culebra
自动生成的python脚本,我通过JPEG手动编辑PNG
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2016 Diego Torres Milano
Created on 2016-09-03 by Culebra v11.5.11
__ __ __ __
/ \ / \ / \ / \
____________________/ __\/ __\/ __\/ __\_____________________________
___________________/ /__/ /__/ /__/ /________________________________
| / \ / \ / \ / \ \___
|/ \_/ \_/ \_/ \ o \
\_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''
import re
import sys
import os
from com.dtmilano.android.viewclient import ViewClient
TAG = 'CULEBRA'
_s = 5
_v = '--verbose' in sys.argv
kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}
vc = ViewClient(device, serialno, **kwargs2)
#vc.dump(window='-1') # FIXME: seems not needed
vc.dump(window=-1)
vc.writeImageToFile('/tmp/${serialno}-${focusedwindowname}-${timestamp}.jpg', 'JPEG', None, False, False)