如果你将它分解成碎片,它们都非常简单.
首先,您需要将应用程序窗口的屏幕截图作为2D像素阵列.有各种不同的方法以特定于平台的方式执行此操作,但您没有提到您正在使用的平台,所以…让我们使用PIL抓住整个屏幕:
screenshot = ImageGrab.grab()
haystack = screenshot.load()
现在,您需要将base64转换为图像.快速浏览一下,它显然只是一个编码的PNG文件.所以:
decoded = data.decode('base64')
f = cStringIO.StringIO(decoded)
image = Image.open(f)
needle = image.load()
现在你有一个2D像素数组,你想看看它是否存在于另一个2D数组中.有更快的方法可以做到这一点 – 使用numpy可能是最好的 – 但也有一种愚蠢的暴力方式,这很容易理解:只是迭代干草堆的行;对于每一个,迭代列,看看是否找到与第一行针匹配的字节.如果是这样,继续浏览其余行,直到你完成所有针,在这种情况下你返回True,或找到不匹配,在这种情况下你继续,然后再次开始下一行.