那么,如何完成步驟 3 的自動化,讓機器做人類的事情呢?我們把它再細分成三個步驟:
首先,需要找到一種機器能讀懂的數據表示,這種數據表示要既能夠表示排版的結果、反映代碼的修改,也能夠通過算法來對比,對比的結果要便于可視化的展示,方便開發、測試同學判斷差異是否符合預期。
我們的選擇有:
NSAttributedString,是從 EPUB、TXT 處理后得到的中間數據,包括文字和排版樣式。這種數據結構比較抽象,沒有一種很好的差異計算方法、和差異結果可視化方法。
閱讀器屏幕截圖,位圖格式,借助各種成熟的數字圖像處理算法,容易計算差異
考慮到 2 容易計算差異,可視化輸出效果較好,我們選取閱讀器屏幕截圖作為數據表示。
選擇了圖像作為排版結果的數據表示,那么如何對比圖像差異呢?
首先,我們要選取圖像特征,然后才能對比圖片差異。圖像的特征,從視覺認知概念上,有低、中、高級特征:
這里我們希望每個像素的差異都能檢測到,所以選取像灰度化處理過的圖像矩陣作為特征。
原文轉自:http://wereadteam.github.io/2016/08/23/Typesetter/