[英]FreeType Glyph Metrics Caching of multiple Font sizes
我有一個項目,可將產品信息呈現到給定的模板(自定義XML格式)上,然后以自定義二進制LCD格式呈現並轉換它(簡化步驟)
我們的客戶現在需要自動調整文本容器。 (客戶會給一個特定大小的盒子,所有字符串必須自動調整大小以適合該容器
為此,我必須計算多種字體大小的字符串的寬度(自由類型:每個字符/字形)(例如100pt不適合,99pt不適合,98pt不適合...,...,65pt適合!)
問題是,對於每個自動調整元素,freetype需要花費大量時間(〜20-30 ms),而整個應用程序只能使用〜100ms。 (因此,當客戶再添加5個自動調整元素時,已經保證超過100毫秒)
一個自制的font-cache-generator,它生成一個字體文件,並為從1pt到100pt的字體大小計算每個unicode字符的寬度。 然后,它從數據中生成C源代碼,如下所示:
//
#define COUNT_SIZES 100 // Font-Size 1-100
#define COUNT_CHARS 65536 // Full Unicode Table
int char_sizes[COUNT_SIZES][COUNT_CHARS] =
{
{1,1,2,2,3,1,1,2,2,3,1,2,2,1,2,2,3,1,2,.......// 65536
{2,2,3,3,4,2,1,3,3,4,2,3,3,2,3,3,4,2,3,.......// 65536
{2,3,4,3,5,2,2,4,4,5,2,4,4,2,4,3,5,3,3,.......// 65536
// ...
// 100 font sizes
};
在動態庫(.so)中編譯的文件大小為25 MB,“ dlload”需要約50ms,“ dlsym”需要約10ms(WAAAAAAY太多!)
以同樣的方式,但是只有ASCII表(所以只有65536個中的128個)可以編譯成58 KB的.so文件,“ dlload”大約需要500µs,“ dlsym”大約需要100µs(非常好!)
我的下一個嘗試是將font-cache-generator集成到我的項目中,僅緩存特定客戶所需的字形(歐洲的客戶需要約500個字形,亞洲的一個(例如繁體中文)需要約2500個字形(僅示例) ,不確定,甚至可能還需要)
但是在我進行艱苦的旅程(:()之前,我想問你,你是否知道一種更好的方法呢?
我不敢相信這是不可能的,否則瀏覽器應該如何顯示lorem ipsum而不加載秒數? :D
關於如何解決此性能問題的任何想法?
數據高速緩存上是否有信息鏈接,可以極快地訪問高速緩存(大約<1ms)?
我發現了使用這些庫的一種可能方法:
Github項目: Harfbuzz-ICU-Freetype
寬松的構建說明:
option(WITH_XX "DESCRIPT." ON/OFF)
搜索option(WITH_XX "DESCRIPT." ON/OFF)
-D
啟用CMake
選項: cmake -DWITH_ZLIB=ON -DWITH_Harfbuzz=ON ..
mkdir build && cd build && cmake [option [option [...]]] ..
make -j $count_of_cpu_cores && sudo make install
Google for Harfbuzz Layout的一些教程/指南
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.