如何使用 adb 在 Windows 上获取屏幕截图



当我在python commands.getstatusoutput中使用adb exec-out screencap -p或Macbook上的subprocess.call来获取像波纹管这样的屏幕截图时,我可以得到完美的png文件字节,但是在Windows上运行时,我只是cannot identify image file <_io.BytesIO object at 0x000002ADDDB49BF8>在Image.open((

def cmd(line, out_is_binary=False):
    cmdline = line if isinstance(line, str) else ' '.join(line)
    with tempfile.TemporaryFile() as stdout:
        status = subprocess.call(line, stdout=stdout, stderr=stdout)
        stdout.seek(0)
        output = stdout.read()
    output = str(output, 'utf-8') if not out_is_binary else output
    output_log = output if not out_is_binary else '<binary data>'
    print('"%s" returned %s, and says:%s%s' % (cmdline, status, os.linesep, output_log))
    return status, output
def capture():
    line = [ADB_BIN, 'exec-out', 'screencap', '-p']
    status, output = cmd(line, out_is_binary=True)
    if status:
        raise RuntimeError('通过USB调试截屏失败')
    fp = BytesIO(output)
    return Image.open(fp)

PS:这个问题不应该是亚行问题的重复。因为这里的重点是在DAMMIT Windows CMD或Windows中的Python中获取屏幕截图的方法。

最后我得到了像波纹管这样的解决方案,如果在 Windows 上运行,使用 base64 传输数据,然后用 python 解码

def capture():
    line = [ADB_BIN, 'exec-out', 'screencap', '-p']
    if os.name == 'nt':
        line = [ADB_BIN, 'shell', 'screencap -p | base64']
    status, output = cmd(line, out_is_binary=True)
    if status:
        raise RuntimeError('通过USB调试截屏失败')
    if os.name == 'nt':
        output = base64.decodebytes(output)
    fp = BytesIO(output)
    return Image.open(fp)

最新更新