Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MonkeyImage到二进制_Android_Ruby_Sockets_Android Emulator_Monkeyrunner - Fatal编程技术网

Android MonkeyImage到二进制

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

我正在实现使用Android MonkeyImage拍摄Emulator的屏幕截图。 捕获的数据通过TCPSocket发送到Ruby脚本,并尝试将其保存为jpg图像。 但是我不知道如何用Ruby将发送的字符串数据转换成二进制。 代码如下

[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)