【问题标题】:Python on Win7: matching screen shots from 2 different PCs?Win7 上的 Python:匹配来自 2 台不同 PC 的屏幕截图?
【发布时间】:2014-09-28 16:49:29
【问题描述】:

我使用 Desktopmagic https://pypi.python.org/pypi/Desktopmagic/14.3.11#downloads 使用以下代码使用python拍摄小(50px x 50px)屏幕截图:

from desktopmagic.screengrab_win32 import (
    getDisplayRects, saveScreenToBmp, saveRectToBmp, getScreenAsImage,
    getRectAsImage, getDisplaysAsImages)

def snap_shot(left_offset, top_offset, width, height, file_name):
    right=left_offset+width
    bottom=top_offset+height

    saveRectToBmp(file_name, rect=(left_offset, top_offset, right, bottom))

我还使用 pillow 将屏幕截图与参考图像进行比较

from PIL import Image

def compare_images(f1,f2):
    h1 = Image.open(f1).histogram()
    h2 = Image.open(f2).histogram()

    rms = math.sqrt(functools.reduce(operator.add,map(lambda a,b: (a-b)**2, h1, h2))/len(h1))

    return rms

在我尝试将代码和参考图像迁移到新 PC 之前,一切正常。 在人眼看来,在 PC1 和 PC2 上截取的屏幕截图没有区别,但我的 compare_images 函数看到了区别。

在 PC1 上拍摄的参考图像和 PC2 上的屏幕截图之间寻找完全匹配时,测试失败。

那么.... 2 台 Windows 计算机如何以相同的方式呈现桌面窗口? 我假设如果它们是相同的硬件,屏幕截图将匹配 100%。但关键要素是什么?两者拥有相同的显卡就足够了吗?您认为哪些因素会起作用?

提前致谢

【问题讨论】:

    标签: python windows screenshot pillow


    【解决方案1】:

    两台不同的机器可能有不同的操作系统版本(如果不是系列)和它们的 GUI 元素(窗口边框、窗口图标、窗口顶部框架颜色方案、桌面动机、光标图标、壁纸图像/瓷砖/比例因子和更多)

    如果只是颜色深度设置不同(对于所有其他相同/相同的设置),则生成的像素值彼此不匹配(原则上不得)。可以用最简单的方法检查这种情况——只需比较 BMP 文件的 ColourPALETTE 内容的 32 位颜色深度与 f1f2 文件中减少的 16 位颜色深度。

    【讨论】:

      猜你喜欢
      • 2019-10-06
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多