本發(fā)明涉及一種提高手機app下載圖片的速度的方法,該方法適用范圍ios和android手機設備圖片讀取。
背景技術:
現(xiàn)在手機相機像素越來越大,圖片越來越清晰,app讀取圖片時間越來越長,現(xiàn)有的技術主要是利用緩沖機制來加載圖片,客戶端讀取圖片后,緩沖在內(nèi)存和手機磁盤存儲空間中,下次加載先從緩沖中讀取,緩沖中沒有再從磁盤讀取,磁盤中沒有再網(wǎng)絡加載。
現(xiàn)有技術的缺點:沒有解決網(wǎng)絡加載圖片的時間問題。例如,app加載一張圖片,首次還是從網(wǎng)絡加載,這時受網(wǎng)絡環(huán)境和圖片大小的影響,用戶會出現(xiàn)等待加載圖片的過程,而這個過程大大降低了用戶體驗。
技術實現(xiàn)要素:
為克服現(xiàn)有技術的缺陷,本發(fā)明提供一種提高手機app下載圖片的速度的方法,本發(fā)明的技術方案是:
一種提高手機app下載圖片的速度的方法,包括以下步驟:
步驟(1)服務器通過http請求發(fā)送到客戶端;
步驟(2)由客戶端將jpeg體附加到預定義的jpeg頭上,生成一個普通的jpeg圖片;
步驟(3)經(jīng)過標準的jpeg解碼后,客戶端運行預定的高斯模糊,并拉伸jpeg圖片的尺寸以適應窗口大小。
所述的步驟(1)為在http請求中返回一段{…,“huffman”:“012a2a1100020200050106…”},其中,第一字節(jié)01為tag值,表示不同的標準huffman,第二字節(jié)2a為寬度,第三字節(jié)2a為高度,其余為有效負荷。
所述的步驟(2)的具體方法為客戶端讀取數(shù)據(jù)后,存儲tag標記內(nèi)表示的信息,包括圖像寬度、高度和哈夫曼表。
所述的步驟(3)通過讀出哈夫曼表,建立哈夫曼樹后對圖片進行解碼。
所述建立哈夫曼樹的具體方法為:
1)第一個碼字必定為0,如果第一個碼字位數(shù)為1,則碼字為0;如果第一個碼字位數(shù)為2,則碼字為00,如此類推;
2)從第二個碼字開始,如果它和它前面的碼字位數(shù)相同,則當前碼字為它前面的碼字加1;如果它的位數(shù)比它前面的碼字位數(shù)大,則當前碼字是前面的碼字加1后再在后邊添若干個0,直至滿足位數(shù)長度為止。
本發(fā)明的優(yōu)點是:在網(wǎng)速緩慢的情況下,圖片加載時間得以縮短。而在網(wǎng)速非??斓那闆r下,這可以確保用戶立即看到封面照片預覽,提升了整體體驗。
具體實施方式
下面結合具體實施例來進一步描述本發(fā)明,本發(fā)明的優(yōu)點和特點將會隨著描述而更為清楚。但這些實施例僅是范例性的,并不對本發(fā)明的范圍構成任何限制。本領域技術人員應該理解的是,在不偏離本發(fā)明的精神和范圍下可以對本發(fā)明技術方案的細節(jié)和形式進行修改或替換,但這些修改和替換均落入本發(fā)明的保護范圍內(nèi)。
本發(fā)明涉及一種提高手機app下載圖片的速度的方法,包括以下步驟:
步驟(1)服務器通過http請求發(fā)送到客戶端;
步驟(2)由客戶端將jpeg體附加到預定義的jpeg頭上,生成一個普通的jpeg圖片;
步驟(3)經(jīng)過標準的jpeg解碼后,客戶端運行預定的高斯模糊,并拉伸jpeg圖片的尺寸以適應窗口大小。
所述的步驟(1)為在http請求中返回一段{…,“huffman”:“012a2a1100020200050106…”},其中,第一字節(jié)01為tag值,表示不同的標準huffman,第二字節(jié)2a為寬度,第三字節(jié)2a為高度,其余為有效負荷。
所述的步驟(2)的具體方法為客戶端讀取數(shù)據(jù)后,存儲tag標記內(nèi)表示的信息,包括圖像寬度、高度和哈夫曼表。
所述的步驟(3)通過讀出哈夫曼表,建立哈夫曼樹后對圖片進行解碼。
所述建立哈夫曼樹的具體方法為:
1)第一個碼字必定為0,如果第一個碼字位數(shù)為1,則碼字為0;如果第一個碼字位數(shù)為2,則碼字為00,如此類推;
2)從第二個碼字開始,如果它和它前面的碼字位數(shù)相同,則當前碼字為它前面的碼字加1;如果它的位數(shù)比它前面的碼字位數(shù)大,則當前碼字是前面的碼字加1后再在后邊添若干個0,直至滿足位數(shù)長度為止。
建立哈夫曼樹的過程:
a)讀取哈夫曼表:
以下面一段哈夫曼表數(shù)據(jù)舉例說明(數(shù)據(jù)全部以16進制表示):11000202000501060100000000000000000001110221033141125161718191221332
第1字節(jié):11為哈夫曼表id和表類型,其值0x11表示此部分數(shù)據(jù)描述的是ac交流1號表。
第2-17字節(jié):
00020200050106010000000000000000
為不同位數(shù)的碼字的數(shù)量。這16個數(shù)值實際意義為:沒有1位和4位的哈夫曼碼字;2位和3位的碼字各有2個;5位碼字有5個;6位和8位碼字各有1個;7位碼字各有6個;沒有9位或以上的碼字。
第18-34字節(jié):0001110221033141125161718191221332為編碼內(nèi)容,此哈夫曼樹有0+2+2+0+5+1+6+1=17個葉子結點,即本字段有17個字節(jié),這段數(shù)據(jù)表示17個葉子結點按從小到大排列,其權值依次為0、1、11、2、21、3、31、41……。
b)建立哈夫曼樹
n:由于沒有1位的碼字,所以第一個碼字的位數(shù)為2,即碼字為00;
n:由于2位的碼字有兩個,所以第二個碼字位數(shù)仍為2,即碼字為00+1=01;
n:第三個碼字為3位,比第二個碼字長1位,所以第三個碼字為:
01+1=10,然后再添1個“0”,得100;
n:……
如此類推,最后得到這個哈夫曼樹如下:
特別注意的是,如果中間有某個位數(shù)的碼字缺失,例如沒有4位碼字,則應該在3位碼字加1后,添加“00”補足5位,形成下一個5位碼字。
最終,我們獲得一種可以滿足需求的格式。在網(wǎng)速緩慢的情況下,圖片加載時間縮短了30%。而在網(wǎng)速非??斓那闆r下,這可以確保用戶立即看到封面照片預覽,提升了整體體驗。