爬取的woff字型動態變化,且字型座標會隨機偏移一點點(如下圖1.woff和2.woff),無法形成統一的'unicode——字型座標矩陣'對映,只能求兩矩陣的相識度,這裡使用距離相識度(參考機器學習knn分類演算法概念)。
放大後兩者是有區別的:
解決辦法:
以2.woff為標準,人為設定基礎矩陣字型對映,然後讀取1.woff,按字型座標資訊與2.woff的最大相識度求出1.woff的字型對映表。
from fonttools.ttlib import ttfont
import numpy as np```
```# 比較兩個陣列的歐式距離
def compare_axis(axis1, axis2):
# 以座標(0,0)補填空缺
if len(axis1) < len(axis2):
axis1.extend([0, 0] for _ in range(len(axis2) - len(axis1)))
elif len(axis2) < len(axis1):
axis2.extend([0, 0] for _ in range(len(axis1) - len(axis2)))
# 將列表轉換為 numpy 中的陣列
axis1 = np.array(axis1)
axis2 = np.array(axis2)
# 計算並返回歐式距離
return np.sqrt(np.sum(np.square(axis1 - axis2)))```
```# 讀取font資訊
def read_font(path):
''':param path: 檔案路徑
:return: 讀取後的unicode;字型矩陣對映字典
'''font = ttfont(path)
series = font.getglyphnames()
arr_dict = {}
for i in series:
arr_dict[i] = list(font['glyf'][i].coordinates)
del arr_dict['.notdef']
return arr_dict```
# 解析woff檔案,返回解析後對映字典
```def parse_font_code(woff_path):
''':param woff_name: 傳入待解碼woff檔案路徑
:return: 解碼後的
'''# 生成基礎矩陣字型對映
base_dict =
base_code_dict = read_font('2.woff')
new_code_dict = read_font(woff_path)
# print(new_code_dict)
res_dict = {}
for new_k, new_v in new_code_dict.items():
res = float('inf')
for base_k, base_v in base_code_dict.items():
dis = compare_axis(new_v, base_v)
if dis < res:
res = dis
res_dict[new_k] = base_k
for i, v in res_dict.items():
res_dict[i] = base_dict[v]
return res_dict```
```if __name__ == '__main__':
print(parse_font_code('1.woff'))```
Python爬蟲 字型反爬
網頁開發者自己創造一種字型,因為在字型中每個文字都有其代號,那麼以後在網頁中不會直接顯示這個文字的最終的效果,而是顯示他的代號,因此即使獲取到了網頁中的文字內容,也只是獲取到文字的代號,而不是文字本身。因為創造字型費時費力,並且如果把中國3000多常用漢字都實現,那麼這個字型將達到幾十兆,也會影響網...
Flash 動態載入字型
1 在上面這個 demo 壓縮包中的 font 目錄下,大家可以找到 alphafitness.ttf 字型檔案,首先安裝該字型。2 重新啟動 flash,新建乙個 flash 檔案 在 demo 中位於 assets game font.fla 右鍵單擊庫面板,選擇新建字型 new font 如果...
NGUI動態字型教程
注 此教程僅是用於unity 4 第1步 匯入ngui 第2步 匯入ngui 277c dynamicfonts.unitypackage 如果使用的是ngui2.3.1 或更高的話替換uifont.cs 和uifontinspector.cs 第3步 新增ttf 字型,在這裡我用微軟雅黑做例子 經...