那么,如何完成步骤 3 的自动化,让机器做人类的事情呢?我们把它再细分成三个步骤:
首先,需要找到一种机器能读懂的数据表示,这种数据表示要既能够表示排版的结果、反映代码的修改,也能够通过算法来对比,对比的结果要便于可视化的展示,方便开发、测试同学判断差异是否符合预期。
我们的选择有:
NSAttributedString,是从 EPUB、TXT 处理后得到的中间数据,包括文字和排版样式。这种数据结构比较抽象,没有一种很好的差异计算方法、和差异结果可视化方法。
阅读器屏幕截图,位图格式,借助各种成熟的数字图像处理算法,容易计算差异
考虑到 2 容易计算差异,可视化输出效果较好,我们选取阅读器屏幕截图作为数据表示。
选择了图像作为排版结果的数据表示,那么如何对比图像差异呢?
首先,我们要选取图像特征,然后才能对比图片差异。图像的特征,从视觉认知概念上,有低、中、高级特征:
这里我们希望每个像素的差异都能检测到,所以选取像灰度化处理过的图像矩阵作为特征。
原文转自:http://wereadteam.github.io/2016/08/23/Typesetter/