2016-09-03 4 views
1

Android MonkeyImage를 사용하여 Emulator의 화면 캡처를 구현하려고합니다. 캡쳐 된 데이터는 TCPSocket을 통해 Ruby 스크립트로 보내지고 jpg 이미지로 저장됩니다. 그러나 보낸 문자열 데이터를 이진수로 변환하는 방법을 모르겠다. 코드는 다음과 같습니다.Android MonkeyImage to binary

[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() ...)이 작동하지 않습니다. 감사합니다.

답변

0

당신도 dump 명령 행 유틸리티 또는 culebra을 사용하여 생성 할 수있는 파이썬 스크립트를 통해 스크린 샷을 얻기 위해 AndroidViewClient/culebra를 사용할 수 있습니다.

$ dump -Df ~/tmp/sc1.png 

dump

첫째, 명령 행은 일반적으로 PNG로 저장됩니다 (그러나 좋은 추가 될 수 있음)로 JPEG로 스크린 샷을 저장할 수있는 옵션이 없습니다. culebra에 의해 자동 생성 파이썬 스크립트를 통해 다른 한편으로

, 내가 수동으로 스크립트를 여러 번 실행하는 경우가 덮어 쓰기되지 않도록 파일 이름이 자동 생성되는 것을 알 수
#! /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) 

JPEG

하여 PNG를 편집 한 경우.

자동으로 추가 할 수 있습니다, 장치 예술, 그림자와 눈부심에 대한 스크린 샷을 사용하고자하는 내용에 따라, http://dtmilano.blogspot.ca/2015/05/android-beautiful-screenshots-take-2.html

편집

는 좋은 소식, AndroidViewClient/쿨 레브라 11.5.12가

을 지원 참조
$ dump -Df ~/tmp/sc1.jpg