本申請涉及一種檢測指定字體是否安裝的技術(shù)領(lǐng)域,具體涉及一種用于支持canvas的瀏覽器的檢測字體方法,以及對應(yīng)所述檢測字體方法設(shè)置的一種用于支持canvas的瀏覽器的檢測字體裝置。
背景技術(shù):
隨著計算機時代的到來,字庫的概念被大眾所熟知,計算機中使用的字庫一般包括多種適用于計算機語言的字體,字體可分為楷體、黑體、隸書、宋體等多種形式,只有在計算機中安裝某一字體,該字體才可以在計算機上顯示,若沒有安裝,則該字體不會顯示。
為了統(tǒng)計和收集某一指定字體在用戶的電腦上的安裝情況,可通過使用前端腳本嵌入瀏覽器中的方式檢測指定字體是否安裝。
瀏覽器可分為支持canvas(畫布)功能和不支持畫布功能兩種,針對支持畫布功能的瀏覽器,現(xiàn)有技術(shù)采用的是將指定字體和默認字體分別在創(chuàng)建的畫布上渲染顯示,所述默認字體是電腦中安裝的默認顯示的字體,指定字體是需要檢測的是否安裝的字體,通過數(shù)據(jù)獲取方法分別獲取指定字體和默認字體的寬度和高度,然后將兩個字體的寬度及高度進行對比操作。該方法適合英文字體的檢測,因為英文字母中不同的字母寬度不同,但是對于中文,每個字都是等寬等高的,所以采用該方法將大大降低檢測的準確性。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┮环N用于支持canvas的瀏覽器的檢測字體的方法,以解決現(xiàn)有檢測字體安裝情況時出現(xiàn)的檢測準確性低的問題。
本申請還提供用于支持canvas的瀏覽器的檢測字體的裝置。
本申請?zhí)峁┮环N用于支持canvas的瀏覽器的檢測字體的方法,包括:
在當前頁面上創(chuàng)建畫布;
在所述畫布上繪制預(yù)設(shè)圖形,所述預(yù)設(shè)圖形形成的區(qū)域為預(yù)設(shè)區(qū)域;
在所述畫布上分別采用默認字體和指定字體填充文本,填充有文本的區(qū)域稱為文本填充區(qū)域,所述文本填充區(qū)域與所述預(yù)設(shè)區(qū)域具有重疊區(qū)域;
獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),所述像素數(shù)據(jù)包括默認字體數(shù)據(jù)和指定字體數(shù)據(jù);所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)分別為在畫布上采用默認字體和指定字體填充文本時,采集的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù);
根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝。
可選的,所述根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝,包括:
當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)不相同時,則判斷為所述指定字體已安裝。
可選的,所述根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝,包括:
當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同時,則執(zhí)行下述操作:
判斷所述默認字體和所述指定字體的名稱是否相同;若不同,則判斷為所述指定字體未安裝。
可選的,當所述默認字體和所述指定字體的名稱相同,則所述指定字體已安裝,且所述指定字體與所述默認字體的字體相同。
可選的,當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同時,首先執(zhí)行下述操作:
獲取所述默認字體的名稱;
將所述默認字體的名稱與所述指定字體的名稱比對。
可選的,所述獲取所述默認字體的名稱是,采用瀏覽器內(nèi)置的應(yīng)用程序編程接口獲取所述默認字體的名稱。
可選的,當所述重疊區(qū)域為所述預(yù)設(shè)區(qū)域時,所述重疊區(qū)域為所述文本填充區(qū)域中的部分區(qū)域;
相應(yīng)的,所述獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)是,采集所述文本填充區(qū)域中的部分區(qū)域,所述部分區(qū)域為所述文本填充區(qū)域中預(yù)先設(shè)定的用于表征文本特征的部分。
可選的,所述部分區(qū)域為所述文本填充區(qū)域中預(yù)先設(shè)定的用于表征文本特 征的部分是指在所述重疊區(qū)域內(nèi)文本填充的區(qū)域占重疊區(qū)域的比例大于等于50%。
可選的,所述獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)步驟具體是:
確定所述重疊區(qū)域的區(qū)域范圍;
對所述區(qū)域范圍內(nèi)每個像素點進行逐個掃描;
獲取每個像素點的像素數(shù)據(jù)。
可選的,所述獲取每個像素點的像素數(shù)據(jù)是,通過應(yīng)用程序編程接口中的數(shù)據(jù)調(diào)用函數(shù)來獲取重疊區(qū)域內(nèi)每個像素點的像素數(shù)據(jù)。
可選的,所述像素數(shù)據(jù)是所述預(yù)設(shè)區(qū)域內(nèi)每個像素點的RGBA值,其中R為紅色通道參數(shù)值,G為綠色通道參數(shù)值,B為藍色通道參數(shù)值,A為色彩的不透明度參數(shù)值。
可選的,所述在所述畫布上繪制預(yù)設(shè)圖形是,在所述畫布上繪制兩個預(yù)設(shè)圖形,形成兩個預(yù)設(shè)區(qū)域;
相應(yīng)的,所述在所述畫布上分別采用默認字體和指定字體填充文本包括在所述畫布的兩個文本填充區(qū)域分別采用默認字體和指定字體填充文本;
兩個預(yù)設(shè)區(qū)域與兩個文本填充區(qū)域分別形成兩個重疊區(qū)域,所述獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)是同時獲取兩個重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
可選的,所述在所述畫布上繪制預(yù)設(shè)圖形是,在所述畫布上繪制一個預(yù)設(shè)圖形,形成一個預(yù)設(shè)區(qū)域;
相應(yīng)的,所述在所述畫布上分別采用默認字體和指定字體填充文本,獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)包括:
在所述畫布上采用默認字體填充文本;
獲取采用默認字體填充文本時所述重疊區(qū)域內(nèi)的像素數(shù)據(jù);
在所述畫布上采用指定字體填充文本;
獲取采用指定字體填充文本時所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
可選的,所述在所述畫布上分別采用默認字體和指定字體填充文本是采用文本填充方法以默認字體和指定字體在畫布上填充文本。
可選的,所述在當前頁面上創(chuàng)建畫布是采用canvas圖形容器和腳本命令生成畫布。
本申請還提供一種用于支持canvas的瀏覽器的檢測字體的裝置,包括:
畫布創(chuàng)建單元,用于在當前頁面上創(chuàng)建畫布;
預(yù)設(shè)圖形繪制單元,用于在所述畫布上繪制預(yù)設(shè)圖形,所述預(yù)設(shè)圖形形成的區(qū)域為預(yù)設(shè)區(qū)域;
文本填充單元,用于在所述畫布上分別采用默認字體和指定字體填充文本,填充有文本的區(qū)域稱為文本填充區(qū)域,所述文本填充區(qū)域與所述預(yù)設(shè)區(qū)域具有重疊區(qū)域;
像素數(shù)據(jù)獲取單元,用于獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),所述像素數(shù)據(jù)包括默認字體數(shù)據(jù)和指定字體數(shù)據(jù);所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)分別為在畫布上采用所述默認字體和指定字體填充文本時,采集的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù);
判斷單元,用于根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝。
可選的,所述判斷單元具體用于,當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)不相同時,則判斷為所述指定字體已安裝。
可選的,當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同時,所述判斷單元還用于,判斷所述默認字體和所述指定字體的名稱是否相同;若不同,則判斷為所述指定字體未安裝。
可選的,所述判斷單元中當所述默認字體和所述指定字體的名稱相同,則所述指定字體已安裝,且所述指定字體與所述默認字體的字體相同。
可選的,所述判斷單元還包括:
默認字體名稱獲取子單元,用于當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同時,獲取所述默認字體的名稱;
字體名稱比對子單元,用于將所述默認字體的名稱與所述指定字體的名稱比對。
可選的,所述默認字體名稱獲取子單元具體是,采用瀏覽器內(nèi)置的應(yīng)用程序編程接口獲取所述默認字體和所述指定字體的名稱。
可選的,所述文本填充單元中,當所述重疊區(qū)域為所述預(yù)設(shè)區(qū)域時,所述重疊區(qū)域為所述文本填充區(qū)域的部分區(qū)域;
相應(yīng)的,所述像素數(shù)據(jù)獲取單元具體用于,采集所述文本填充區(qū)域中的部分區(qū)域,所述部分區(qū)域為所述文本填充區(qū)域中預(yù)先設(shè)定的用于表征文本特征的部分。
可選的,所述像素數(shù)據(jù)獲取單元包括:
區(qū)域范圍確定子單元,用于確定所述重疊區(qū)域的區(qū)域范圍;
掃描子單元,用于對所述區(qū)域范圍內(nèi)每個像素點進行逐個掃描;
數(shù)據(jù)獲取子單元,用于獲取每個像素點的像素數(shù)據(jù)。
可選的,所述數(shù)據(jù)獲取子單元中具體是通過應(yīng)用程序編程接口中的數(shù)據(jù)調(diào)用函數(shù)來獲取重疊區(qū)域內(nèi)每個像素點的像素數(shù)據(jù)。
可選的,所述像素數(shù)據(jù)是所述預(yù)設(shè)區(qū)域內(nèi)每個像素點的RGBA值,其中R為紅色通道參數(shù)值,G為綠色通道參數(shù)值,B為藍色通道參數(shù)值,A為色彩的不透明度參數(shù)值。
可選的,所述預(yù)設(shè)圖形繪制單元中繪制的預(yù)設(shè)圖形是,在所述畫布上繪制兩個預(yù)設(shè)圖形,形成兩個預(yù)設(shè)區(qū)域;
相應(yīng)的,所述文本填充單元具體用于在所述畫布的兩個文本填充區(qū)域分別采用默認字體和指定字體填充文本;
兩個預(yù)設(shè)區(qū)域與兩個文本填充區(qū)域分別形成兩個重疊區(qū)域,所述像素數(shù)據(jù)獲取單元具體用于同時獲取兩個重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
可選的,所述預(yù)設(shè)圖形繪制單元中繪制的預(yù)設(shè)圖形是,在所述畫布上繪制一個預(yù)設(shè)圖形,形成一個預(yù)設(shè)區(qū)域;
文本填充單元包括默認字體填充子單元和指定字體填充子單元,所述像素數(shù)據(jù)獲取單元包括分別對應(yīng)默認字體填充子單元和指定字體填充子單元的默認字體像素獲取單元和指定字體像素獲取單元;
所述默認字體填充子單元用于在所述畫布上采用默認字體填充文本;
所述默認字體像素獲取單元用于獲取采用默認字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù);
所述指定字體填充子單元用于在所述畫布上采用指定字體填充文本;
所述指定字體像素獲取單元用于獲取采用指定字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
可選的,所述文本填充單元具體是采用文本填充方法以默認字體和指定字體在畫布上填充文本。
可選的,所述畫布創(chuàng)建單元具體是采用canvas圖形容器和腳本命令生成畫布。
與現(xiàn)有技術(shù)相比,本申請具有以下優(yōu)點:本申請?zhí)峁┮环N用于支持canvas的瀏覽器的檢測字體的方法,包括:在當前頁面上創(chuàng)建畫布;在所述畫布上繪制預(yù)設(shè)圖形,所述預(yù)設(shè)圖形形成的區(qū)域為預(yù)設(shè)區(qū)域;在所述畫布上分別采用默認字體和指定字體填充文本,填充有文本的區(qū)域稱為文本填充區(qū)域,所述文本填充區(qū)域與所述預(yù)設(shè)區(qū)域具有重疊區(qū)域;獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),所述像素數(shù)據(jù)包括默認字體數(shù)據(jù)和指定字體數(shù)據(jù);所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)分別為在畫布上采用所述默認字體和指定字體填充文本時,采集的所述預(yù)設(shè)區(qū)域內(nèi)的像素數(shù)據(jù);根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝。該方法是根據(jù)獲取的預(yù)設(shè)區(qū)域內(nèi)的像素數(shù)據(jù)及默認字體和指定字體的名稱判斷指定字體是否安裝,若檢測出某一客戶端默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同且默認字體和指定字體的名稱不同,則說明以指定字體填充文本時由于指定字體未安裝則實際以默認字體填充,導(dǎo)致像素數(shù)據(jù)相同但是字體名稱不同,若兩者像素數(shù)據(jù)不同,則說明指定字體已經(jīng)安裝可用。采用掃描出的預(yù)設(shè)區(qū)域的像素數(shù)據(jù)進行對比判斷指定字體是否安裝可以提高檢測的準確性。
附圖說明
圖1是本申請實施例提供的一種用于支持canvas的瀏覽器的檢測字體的方法的流程圖。
圖2是本申請實施例提供的重疊區(qū)域為預(yù)設(shè)區(qū)域時獲取重疊區(qū)域內(nèi)像素數(shù)據(jù)的效果圖.
圖3是本申請實施例提供的獲取所述預(yù)設(shè)區(qū)域內(nèi)的像素數(shù)據(jù)的其中一個方法的流程圖。
圖4是本申請實施例提供的一種用于支持canvas的瀏覽器的檢測字體的裝置的示意圖。
具體實施方式
在下面的描述中闡述了很多具體細節(jié)以便于充分理解本申請。但是本申請能夠以很多不同于在此描述的其它方式來實施,本領(lǐng)域技術(shù)人員可以在不違背本申請內(nèi)涵的情況下做類似推廣,因此本申請不受下面公開的具體實施的限制。
在本申請中,分別提供了一種用于支持canvas的瀏覽器的檢測字體方法,以及一種用于支持canvas的瀏覽器的檢測字體裝置,在下面的實施例中逐一進行詳細說明。首先對本申請?zhí)峁┑募夹g(shù)方案作簡要說明。
根據(jù)本申請技術(shù)方案的要求,本申請的方案對不具有canvas功能的瀏覽器并不適用,如低于ie8版本的ie瀏覽器,由于其不具有canvas功能,通常采用最原生方法通過獲取字體的名稱檢測指定字體是否安裝。
本申請針對的瀏覽器是具有canvas功能的瀏覽器,一般為現(xiàn)代瀏覽器或者是高于ie8版本的ie瀏覽器,其中,現(xiàn)代瀏覽器如谷歌瀏覽器、火狐瀏覽器和opera瀏覽器等,上述瀏覽器具有的共同特點是均支持canvas功能,所述canvas是利用腳本語言(如JavaScript)在網(wǎng)頁上繪制圖像的應(yīng)用程序編程接口。而本申請的技術(shù)方案依賴于canvas技術(shù),是以在網(wǎng)頁上繪制圖形為基礎(chǔ),并對圖像進行相應(yīng)操作的一項技術(shù)。
本申請實施例的技術(shù)方案是應(yīng)用于web前端開發(fā),即通過前端腳本的方式可以完成本申請的技術(shù)方案。
圖1是本申請實施例提供的一種用于支持canvas的瀏覽器的檢測字體的方法的流程圖,請參照圖1,本申請?zhí)峁┮环N用于支持canvas的瀏覽器的檢測字體的方法,步驟如下:
步驟S101,在當前頁面上創(chuàng)建畫布。
采用canvas圖形容器和腳本命令在當前瀏覽器的頁面上創(chuàng)建畫布,所述canvas圖形容器用于在瀏覽器的頁面上實時生成圖像,并且可以操作圖像的內(nèi)容,所生成的圖像可定義為采用JavaScript操作的位圖(bitmap)。而針對位圖的相應(yīng)操作可以獲取該位圖特定位置的圖像的像素。
所述JavaScript是一種屬于網(wǎng)絡(luò)的腳本語言,已經(jīng)被廣泛應(yīng)用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)動能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在html中來實現(xiàn)自身的功能的。
步驟S102,在所述畫布上繪制預(yù)設(shè)圖形,所述預(yù)設(shè)圖形形成的區(qū)域為預(yù)設(shè) 區(qū)域。
在上述通過圖形容器創(chuàng)建的畫布上繪制預(yù)設(shè)圖形,該繪制過程可通過腳本語言(如JavaScript)進行實現(xiàn),可以通過JavaScript創(chuàng)建一個矩形的預(yù)設(shè)圖形,該預(yù)設(shè)圖形形成的區(qū)域定義為預(yù)設(shè)區(qū)域,由于創(chuàng)建的畫布為位圖格式,在該畫布上的預(yù)設(shè)區(qū)域內(nèi)也同樣為位圖格式,通過數(shù)據(jù)獲取方法等可以獲取所述預(yù)設(shè)區(qū)域內(nèi)的像素數(shù)據(jù)。
由于本申請實施例提供的技術(shù)方案中涉及兩種字體的比較,所以在繪制預(yù)設(shè)圖形時,可以有兩種方式,分別如下:
第一種繪制預(yù)設(shè)圖形的方式:可以在所述畫布上繪制兩個相同大小的預(yù)設(shè)圖形,形成兩個預(yù)設(shè)區(qū)域,分別為第一預(yù)設(shè)區(qū)域和第二預(yù)設(shè)區(qū)域。
上述兩個預(yù)設(shè)區(qū)域可以是按照橫向?qū)R的方式排列,也可以是按照豎向?qū)R的方式排列,也可以是繪制的兩個沒有排列規(guī)則和位置關(guān)系的預(yù)設(shè)圖形。
由于后續(xù)步驟的需求,兩個預(yù)設(shè)區(qū)域之間不可以重疊,并且兩個區(qū)域之間需要預(yù)留一定的空間,以便在后續(xù)設(shè)置文本填充區(qū)域時,所述文本填充區(qū)域不會同時與第一預(yù)設(shè)區(qū)域和第二預(yù)設(shè)區(qū)域有重合區(qū)域。
第二種繪制預(yù)設(shè)圖形的方式:可以在所述畫布上繪制一個預(yù)設(shè)圖形,形成一個預(yù)設(shè)區(qū)域。
若為該種方式時,需要重復(fù)利用該預(yù)設(shè)區(qū)域,并且所述預(yù)設(shè)區(qū)域在所述畫布上的位置不受限制。
上述兩種繪制預(yù)設(shè)圖形的方式均可采用,在可以達到本申請實施例的技術(shù)方案的前提下可以靈活變動。
步驟S103,在所述畫布上分別采用默認字體和指定字體填充文本,填充有文本的區(qū)域稱為文本填充區(qū)域,所述文本填充區(qū)域與所述預(yù)設(shè)區(qū)域具有重疊區(qū)域。
在該步驟中涉及兩個概念,一個是默認字體,一個是指定字體。以下對上述兩種字體做詳細介紹。
所述默認字體是瀏覽器的當前頁面顯示的字體,該字體在瀏覽器中一定安裝并且可用才可以通過頁面渲染出來,因此,默認字體是渲染在頁面上已經(jīng)安裝好的字體,也是本申請實施例的方案中需要與指定字體做比對的字體。
所述指定字體是需要檢測用戶是否安裝的字體,也可稱為待檢測字體。當 用戶安裝了所述指定字體時,且用戶設(shè)置瀏覽器的字體為指定字體進行顯示,瀏覽器頁面中被指定的文字部分將以指定字體顯示,但是,如果所述指定字體沒有安裝時,且用戶設(shè)置瀏覽器的字體為指定字體進行顯示,但由于用戶電腦并沒有安裝該指定字體,瀏覽器頁面中被指定的文字部分將會以默認字體替代指定進行顯示。
在所述畫布上分別采用默認字體和指定字體填充文本,具體可采用調(diào)用文本填充函數(shù)fillText()的方法填充默認字體的文本和指定字體的文本,且填充有文本的區(qū)域稱為文本填充區(qū)域。
由于步驟S102中的繪制的預(yù)設(shè)圖形分為兩種方式,因此,在采用默認字體和指定字體填充文本時,也會出現(xiàn)不同的方式。
首先,針對步驟S102中第一種繪制預(yù)設(shè)圖形的方式(請參照步驟S102中的內(nèi)容),在該方式下,形成第一預(yù)設(shè)區(qū)域和第二預(yù)設(shè)區(qū)域兩個預(yù)設(shè)區(qū)域。
在所述第一預(yù)設(shè)區(qū)域的相應(yīng)位置采用默認字體填充文本,填充有文本的該區(qū)域稱為默認文本填充區(qū)域;相應(yīng)的,在所述第二預(yù)設(shè)區(qū)域的相應(yīng)位置采用指定字體填充文本,填充有文本的區(qū)域成為指定文本填充區(qū)域。
所述第一預(yù)設(shè)區(qū)域與所述默認本文填充區(qū)域之間的位置關(guān)系為具有重疊區(qū)域,同時所述第二預(yù)設(shè)區(qū)域與所述指定本文填充區(qū)域之間也具有重疊區(qū)域,并且在步驟S102中有介紹,兩個預(yù)設(shè)區(qū)域之間留有一定空間,以保證默認文本填充區(qū)域不會同時與第一預(yù)設(shè)區(qū)域和第二預(yù)設(shè)區(qū)域具有重疊部分,相應(yīng)的,所述指定文本填充區(qū)域也不會同時與第一預(yù)設(shè)區(qū)域和第二預(yù)設(shè)區(qū)域具有重疊部分。
所述第一預(yù)設(shè)區(qū)域也可以與指定文本填充區(qū)域具有重合部分,所述第二預(yù)設(shè)區(qū)域與默認文本填充區(qū)域具有重合部分,即填充文本的先后順序和位置關(guān)系都沒有完全的限定,可根據(jù)實際情況進行選擇。
需要說明的是,所述預(yù)設(shè)區(qū)域與所述文本填充區(qū)域具有的重疊部分可稱為重疊區(qū)域,該重疊區(qū)域可以分為三種情況。
第一種情況是,所述重疊區(qū)域為文本填充區(qū)域。該種情況下,所述文本填充區(qū)域完全處于所述預(yù)設(shè)區(qū)域內(nèi),所述文本填充區(qū)域內(nèi)的填充的文本全部落在所述預(yù)設(shè)區(qū)域內(nèi)。
第二種情況是,所述重疊區(qū)域為預(yù)設(shè)區(qū)域。在該中情況下,所述文本填充區(qū)域包含所述預(yù)設(shè)區(qū)域,且所述預(yù)設(shè)區(qū)域可以定義為所述文本填充區(qū)域的部分 區(qū)域。
所述部分區(qū)域為所述文本填充區(qū)域中預(yù)先設(shè)定的用于表征文本特征的部分。由于該方法是為了檢測所述指定字體是否安裝,需要指定字體和默認字體作比對,因此,在設(shè)置作比對的區(qū)域時,需要將該區(qū)域設(shè)置為最能體現(xiàn)文本的字體特征的文本部分。
通常情況下,文本的筆畫越多越復(fù)雜,則對比特征越明顯,因此,需要在重疊區(qū)域中文本填充部分占用重疊區(qū)域比例較大時則可滿足對比要求,優(yōu)選地,可將所述重疊的部分區(qū)域設(shè)定為在所述重疊區(qū)域內(nèi)文本填充的區(qū)域占重疊區(qū)域的比例大于等于50%。
第三種情況是,所述重疊區(qū)域既不是所述預(yù)設(shè)區(qū)域也不是所述文本填充區(qū)域,即預(yù)設(shè)區(qū)域與文本填充區(qū)域僅具有部分重疊,該種情況下實際應(yīng)用于本申請實施例的方案中相當于第二種情況,即所述預(yù)設(shè)區(qū)域為所述文本填充區(qū)域的部分區(qū)域。
上述描述的是第一種繪制預(yù)設(shè)圖形的方式時在畫布上填充文本的情況,以下介紹第二種繪制預(yù)設(shè)圖形的方式時在畫布上填充文本的情況。
第二種繪制預(yù)設(shè)圖形的方式為在畫布上繪制一個預(yù)設(shè)圖形,從而形成一個預(yù)設(shè)區(qū)域。
在該預(yù)設(shè)區(qū)域的相應(yīng)位置的畫布上填充默認字體或者指定字體,填充有文本的區(qū)域稱為文本填充區(qū)域,所述預(yù)設(shè)區(qū)域與所述文本填充區(qū)域之間具有重疊區(qū)域。
所述重疊區(qū)域同樣也存在三種情況,該三種情況已經(jīng)在上述過程中作了詳細的描述,因此,在此針對所述重疊區(qū)域不再贅述。
由于在所述畫布上僅繪制一個預(yù)設(shè)圖形,形成一個預(yù)設(shè)區(qū)域,但需要在畫布上分別填充默認字體和指定字體,因此,需要重復(fù)利用所述預(yù)設(shè)區(qū)域,在填充默認字體和指定字體的文本時不具有先后順序,且該步驟與下述步驟S104具有關(guān)聯(lián),該情況下的分別采用默認字體和指定字體填充文本的具體過程將在步驟S104中進行詳述。
步驟S104,獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),所述像素數(shù)據(jù)包括默認字體數(shù)據(jù)和指定字體數(shù)據(jù);所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)分別為在畫布上采用所述默認字體和指定字體填充文本時,采集的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
所述獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)的步驟中具體可采用下述步驟實現(xiàn):
確定所述重疊區(qū)域的區(qū)域范圍;
對所述區(qū)域范圍內(nèi)每個像素點進行逐個掃描;
獲取每個像素點的像素數(shù)據(jù)。
其中,獲取每個像素點的像素數(shù)據(jù)具體可通過應(yīng)用程序編程接口(API)中的數(shù)據(jù)調(diào)用函數(shù)(例如getImageDate())來獲取重疊區(qū)域中每個像素點的像素數(shù)據(jù)。
所述像素數(shù)據(jù)是所述預(yù)設(shè)區(qū)域內(nèi)每個像素點的RGBA值,其中RGB是位圖顏色的一種編碼方法,用紅、綠、藍三原色的光學強度來表示一種顏色。這是最常見的位圖編碼方法,可以直接用于屏幕顯示。R為紅色通道參數(shù)值,G為綠色通道參數(shù)值,B為藍色通道參數(shù)值。另外A為色彩的不透明度參數(shù)值,表征某一個像素點的不透明度。
特定區(qū)域內(nèi)的RGBA值可以表征該區(qū)域的像素值是否完全相同,因此,可以采用RGBA值檢測所述指定字體和所述默認字體渲染出的像素值是否相同。
由于上述介紹了所述重疊區(qū)域有三種情況,可分別對上述三種情況時,獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)步驟的進行分別描述。
第一種情況,所述重疊區(qū)域為文本填充區(qū)域,即所述文本填充區(qū)域內(nèi)的填充的文本全部落在所述預(yù)設(shè)區(qū)域內(nèi)。獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)即是獲取所述文本填充區(qū)域內(nèi)的像素數(shù)據(jù)。
在該種情況下,比對默認字體像素數(shù)據(jù)和指定字體像素數(shù)據(jù)時,需要獲取重疊區(qū)域內(nèi)的所有像素點以便獲取檢測結(jié)果,雖然在檢測效率上存在一定的問題,但是可以大大提高檢測字體的準確性。
第二種情況和第三種情況均是所述重疊區(qū)域為所述文本填充區(qū)域的部分區(qū)域。獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)即是抽樣獲取的填充文本的其中某部分的像素數(shù)據(jù)。圖2是本申請實施例提供的重疊區(qū)域為預(yù)設(shè)區(qū)域時獲取重疊區(qū)域內(nèi)像素數(shù)據(jù)的效果圖。請參照圖2,左為黑體,右為宋體,左右兩邊使用不同的字體在canvas創(chuàng)建的畫布中進行字體填充。通過getImageData方法掃描每個圓圈(預(yù)設(shè)區(qū)域)內(nèi)的像素點的RGBA值,這樣在掃描檢測過程中,不需要將填充有文本區(qū)域的所有像素點進行掃描,僅需要將圓圈(預(yù)設(shè)區(qū)域)內(nèi)的像素值掃描獲取即可,因此,不但可以準確檢測兩種字體是否相同,還可以大大提高腳 本運行的速率和性能。
上述雖然描述了所述重疊區(qū)域的三種不同情況下,獲取重疊區(qū)域內(nèi)像素數(shù)據(jù)的方法,但是,不管重疊區(qū)域是哪種情況,獲取的均是所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),該像素數(shù)據(jù)分別是默認字體數(shù)據(jù)和指定字體數(shù)據(jù)。
另外,在步驟S102中介紹有繪制預(yù)設(shè)圖形的兩種方式,根據(jù)繪制圖形的方式不同,則獲取所述重疊區(qū)域內(nèi)像素數(shù)據(jù)的方法也不相同。
在繪制兩個預(yù)設(shè)圖形的情況下,由于兩個預(yù)設(shè)區(qū)域和兩個文本填充區(qū)域共形成兩個重疊區(qū)域,獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)時同時獲取兩個重疊區(qū)域內(nèi)的像素數(shù)據(jù)即可,分別獲取所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)。
在繪制一個預(yù)設(shè)圖形的情況下,獲取所述預(yù)設(shè)區(qū)域內(nèi)的像素數(shù)據(jù)時比較復(fù)雜。在步驟S103中介紹說由于步驟S103和步驟S104之間具有關(guān)聯(lián),因此會在步驟S104中詳述,此處將對該過程進行詳述。圖3是本申請實施例提供的獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)的其中一個方法的流程圖,請參照圖3。
步驟S104-1,在所述畫布上采用默認字體填充文本。
步驟S104-2,獲取采用默認字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
步驟S104-3,在所述畫布上采用指定字體填充文本。
步驟S104-4,獲取采用指定字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
由于在所述畫布上僅設(shè)置有一個預(yù)設(shè)區(qū)域,但需要分別采用默認字體和指定字體填充文本,并獲取默認字體數(shù)據(jù)和指定字體數(shù)據(jù)兩種像素數(shù)據(jù),因此,需要分兩次填充文本和獲取像素數(shù)據(jù),但是采用默認字體和指定字體填充時并沒有順序要求,可以采用圖3所示的步驟進行,也可以先在所述畫布上采用指定字體填充文本,獲取采用指定字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),然后再在所述畫布上采用默認字體填充文本,獲取采用默認字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
步驟S105,根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝。
首先,對獲取的所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)進行判斷,根據(jù)判斷結(jié)果可分析得出所述指定字體是否安裝。
若所述判斷結(jié)果為否,則所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)的像素數(shù)據(jù)不相同,則說明指定字體和默認字體渲染出的文本的像素值是不相同的,如果兩 種字體的像素值不相同,則說明指定字體是可以在網(wǎng)頁或者用戶端的電腦上渲染的,因此,可以說明所述指定字體在用戶端已經(jīng)安裝。
若所述判斷結(jié)果為是,即所述默認字體數(shù)據(jù)與指定字體數(shù)據(jù)相同時,則需要對指定字體和默認字體再分析判斷,可以采用下述步驟進行判斷:
判斷所述默認字體和所述指定字體的名稱是否相同,若不同,則所述指定字體未安裝。
如果所述指定字體數(shù)據(jù)和默認字體數(shù)據(jù)相同,不能直接判斷所述指定字體是否安裝,因為在指定字體數(shù)據(jù)和默認字體數(shù)據(jù)相同的情況下,還存在指定字體名稱與默認字體名稱相同或者不同的情況。
當需要判斷字體名稱,且沒有預(yù)先獲知所述默認字體的名稱的情況下,可先進行下述步驟:
獲取所述默認字體的名稱;
將所述默認字體的名稱與所述指定字體的名稱比對。
所述獲取所述默認字體的名稱具體可采用瀏覽器內(nèi)置的應(yīng)用程序編程接口獲取所述默認字體和所述指定字體的名稱。
當需要判斷字體名稱,但已經(jīng)預(yù)先獲知所述默認字體的名稱的情況下,可以直接判斷所述指定字體與所述默認字體的名稱是否相同。
以下是對指定字體名稱和默認字體名稱相同或不同的情況的分析:
如果指定字體名稱與默認字體名稱相同,則說明所待測的指定字體就是用戶已經(jīng)安裝的默認字體,該情況一般不是我們檢測待測字體時的真正需求,因為如果已經(jīng)根據(jù)字體名稱得知指定字體即是默認字體,就不需要進行后續(xù)的判斷等步驟,因此,兩者名稱相同的情況在此處也可省略。
如果所述指定字體的名稱與所述默認字體的名稱不相同,則根據(jù)分析可判斷出所述指定字體未安裝。具體分析如下:
首先,默認字體數(shù)據(jù)和指定字體數(shù)據(jù)如果不相同,則說明填充的默認字體和指定字體是不相同的。只有用戶安裝了指定字體,在采用指定字體填充文本時,顯示的文本才會以指定字體的字體渲染,若用戶沒有安裝指定字體,則在采用指定字體填充文本時,顯示的文本會以默認字體渲染,獲取的默認字體數(shù)據(jù)和指定字體數(shù)據(jù)應(yīng)該相同,所以,根據(jù)正向和逆向的分析,當默認字體數(shù)據(jù)和指定字體數(shù)據(jù)如果不相同時,說明指定字體在用戶端已安裝。
其次,如果默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同,并且默認字體的名稱與指定字體的名稱不相同時,根據(jù)上述分析可得知如果用戶端未安裝指定字體時,用指定字體填充文本,文本實際將以默認字體渲染顯示,由于默認字體填充和指定字體填充文本均顯示的是默認字體,所以,獲取的默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同,由于指定字體的名稱與默認字體又不相同,說明待檢測的指定字體并不是默認字體,但卻以默認字體顯示,這足以說明指定字體并沒有在用戶安裝使用。
本申請實施例提供的一種用于支持canvas的瀏覽器的檢測字體的方法,通過在瀏覽器的當前頁面的畫布上分別采用默認字體和指定字體填充文本,通過掃描獲取重疊區(qū)域像素數(shù)據(jù),并對像素數(shù)據(jù)進行對比判斷,并根據(jù)判斷結(jié)果確定指定字體是否安裝。該方法通過默認字體和指定字體在蔥段區(qū)域內(nèi)的像素數(shù)據(jù)做比較,大大提高檢測字體的準確性。
另外,本申請實施例還提供一種用于支持canvas的瀏覽器的檢測字體的裝置,該裝置是對應(yīng)于上述一種用于支持canvas的瀏覽器的檢測字體的方法設(shè)置的一種裝置,因此,具體詳細內(nèi)容可參考上述方法。
圖4是本申請實施例提供的一種用于支持canvas的瀏覽器的檢測字體的裝置的示意圖。請參照圖4。
本申請實施例提供一種用于支持canvas的瀏覽器的檢測字體的裝置,包括:
畫布創(chuàng)建單元401,用于在當前頁面上創(chuàng)建畫布;
預(yù)設(shè)圖形繪制單元402,用于在所述畫布上繪制預(yù)設(shè)圖形,所述預(yù)設(shè)圖形形成的區(qū)域為預(yù)設(shè)區(qū)域;
文本填充單元403,用于在所述畫布上分別采用默認字體和指定字體填充文本,填充有文本的區(qū)域稱為文本填充區(qū)域,所述文本填充區(qū)域與所述預(yù)設(shè)區(qū)域具有重疊區(qū)域;
像素數(shù)據(jù)獲取單元404,用于獲取所述重疊區(qū)域內(nèi)的像素數(shù)據(jù),所述像素數(shù)據(jù)包括默認字體數(shù)據(jù)和指定字體數(shù)據(jù);所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)分別為在畫布上采用所述默認字體和指定字體填充文本時,采集的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù);
判斷單元405,用于根據(jù)所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù),判斷所述指定字體是否已安裝。
可選的,所述判斷單元405具體用于,當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)不相同時,則判斷為所述指定字體已安裝。
可選的,當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同時,所述判斷單元405還用于,判斷所述默認字體和所述指定字體的名稱是否相同;若不同,則判斷為所述指定字體未安裝。
可選的,所述判斷單元405中當所述默認字體和所述指定字體的名稱相同,則所述指定字體已安裝,且所述指定字體與所述默認字體的字體相同。
可選的,所述判斷單元405還包括:
默認字體名稱獲取子單元,用于當所述默認字體數(shù)據(jù)和指定字體數(shù)據(jù)相同時,獲取所述默認字體的名稱;字體名稱比對子單元,用于將所述默認字體的名稱與所述指定字體的名稱比對。
可選的,所述默認字體名稱獲取子單元具體是,采用瀏覽器內(nèi)置的應(yīng)用程序編程接口獲取所述默認字體和所述指定字體的名稱。
可選的,所述文本填充單元403中,當所述重疊區(qū)域為所述預(yù)設(shè)區(qū)域時,所述重疊區(qū)域為所述文本填充區(qū)域的部分區(qū)域;
相應(yīng)的,所述像素數(shù)據(jù)獲取單元404具體用于,采集所述文本填充區(qū)域中的部分區(qū)域,所述部分區(qū)域為所述文本填充區(qū)域中預(yù)先設(shè)定的用于表征文本特征的部分。
可選的,所述像素數(shù)據(jù)獲取單元404包括:
區(qū)域范圍確定子單元,用于確定所述重疊區(qū)域的區(qū)域范圍;
掃描子單元,用于對所述區(qū)域范圍內(nèi)每個像素點進行逐個掃描;
數(shù)據(jù)獲取子單元,用于獲取每個像素點的像素數(shù)據(jù)。
可選的,所述數(shù)據(jù)獲取子單元中具體是通過應(yīng)用程序編程接口中的數(shù)據(jù)調(diào)用函數(shù)來獲取重疊區(qū)域內(nèi)每個像素點的像素數(shù)據(jù)。
可選的,所述像素數(shù)據(jù)是所述預(yù)設(shè)區(qū)域內(nèi)每個像素點的RGBA值,其中R為紅色通道參數(shù)值,G為綠色通道參數(shù)值,B為藍色通道參數(shù)值,A為色彩的不透明度參數(shù)值。
可選的,所述預(yù)設(shè)圖形繪制單元402中繪制的預(yù)設(shè)圖形是,在所述畫布上繪制兩個預(yù)設(shè)圖形,形成兩個預(yù)設(shè)區(qū)域;
相應(yīng)的,所述文本填充單元403具體用于在所述畫布的兩個文本填充區(qū)域分別采用默認字體和指定字體填充文本;
兩個預(yù)設(shè)區(qū)域與兩個文本填充區(qū)域分別形成兩個重疊區(qū)域,所述像素數(shù)據(jù)獲取單元404具體用于同時獲取兩個重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
可選的,所述預(yù)設(shè)圖形繪制單元402中繪制的預(yù)設(shè)圖形是,在所述畫布上繪制一個預(yù)設(shè)圖形,形成一個預(yù)設(shè)區(qū)域;
文本填充單元403包括默認字體填充子單元和指定字體填充子單元,所述像素數(shù)據(jù)獲取單元404包括分別對應(yīng)默認字體填充子單元和指定字體填充子單元的默認字體像素獲取單元和指定字體像素獲取單元;
所述默認字體填充子單元用于在所述畫布上采用默認字體填充文本;
所述默認字體像素獲取單元用于獲取采用默認字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù);
所述指定字體填充子單元用于在所述畫布上采用指定字體填充文本;
所述指定字體像素獲取單元用于獲取采用指定字體填充文本的所述重疊區(qū)域內(nèi)的像素數(shù)據(jù)。
可選的,所述文本填充單元403具體是采用文本填充方法以默認字體和指定字體在畫布上填充文本。
可選的,所述畫布創(chuàng)建單元401具體是采用canvas圖形容器和腳本命令生成畫布。
本申請雖然以較佳實施例公開如上,但其并不是用來限定本申請,任何本領(lǐng)域技術(shù)人員在不脫離本申請的精神和范圍內(nèi),都可以做出可能的變動和修改,因此本申請的保護范圍應(yīng)當以本申請權(quán)利要求所界定的范圍為準。
本申請雖然以較佳實施例公開如上,但其并不是用來限定本申請,任何本領(lǐng)域技術(shù)人員在不脫離本申請的精神和范圍內(nèi),都可以做出可能的變動和修改,因此本申請的保護范圍應(yīng)當以本申請權(quán)利要求所界定的范圍為準。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器 (RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
1、計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
2、本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。