用Python通过sockets发送的macOS屏幕截图

2024-05-16 12:42:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我的总体目标是将我的计算机屏幕流到同一个本地网络上的另一台机器上。你知道吗

我知道以前有人问过用python在osx上截图,特别是here,但我对那里的答案不满意。也就是说,他们太慢了。用我的视网膜Mac,我最多有7fps。我现在抓拍的截图是这样的

def capture(path):
    _, displays, count = CG.CGGetActiveDisplayList(1, None, None)
    url = NSURL.fileURLWithPath_(path)

    dest = Quartz.CGImageDestinationCreateWithURL(
        url, LaunchServices.kUTTypeJPEG, 1, None)

    properties = {
        Quartz.kCGImagePropertyDPIWidth: 72,
        Quartz.kCGImagePropertyDPIHeight: 72,
    }

    image = CG.CGDisplayCreateImage(displays[0])
    Quartz.CGImageDestinationAddImage(dest, image, properties)
    Quartz.CGImageDestinationFinalize(dest)

它使用石英捕捉72 dpi的屏幕截图并将其保存到一个文件中。然后,我通过Python套接字发送图像数据。你知道吗

我的主要问题是,有没有明显的地方可以加快这一进程?我主要的两个加速想法是

  1. 如何直接通过套接字从Quartz CGImageRef发送数据,而不将其写入文件?你知道吗
  2. 有没有更快的方法来捕捉截图?我不介意分辨率降低。你知道吗

Tags: 文件pathimage机器noneurlhereproperties