梁麗
(陜西財經職業技術學院陜西咸陽712000)
一種Android開發中的圖像數據流量控制與緩存技術研究
梁麗
(陜西財經職業技術學院陜西咸陽712000)
針對當前Android應用程序開發中對手機用戶流量的消耗問題,從圖像數據處理的角度,提出一種基于JEPG壓縮算法和本地緩存的流量控制技術。通過將JEPG算法移植到Android中,從而在Android上對網絡圖片進行壓縮,實現對用戶手機流量的控制。同時提出一種本地緩存技術,減少用戶對圖片的反復請求造成的流量消耗,增強用戶體驗。最后通過試驗平臺對方案進行驗證,得到良好效果。
Android;JEPG壓縮算法;流量控制;本地緩存;圖像數據
自2007年手機Android系統的發布,針對Android的移動應用開發正在成為當前的熱點。根據相關數據統計,Android應用在2014年達到50萬個,下載次數從200億次增加到500億次,成為當前移動應用開發的熱門。在巨大市場前景的情況下,減少大量訪問帶來的流量增加,從而提高用戶的體驗感成為當前思考的重點問題。對此,本文針對移動應用開發,提出將JEPG算法移植到Android手機中,由此通過壓縮實現對圖片大小的控制。另外針對系統的反復請求導致的流量浪費,提出一種本地緩存方案,并對上述的技術進行了詳細的實現。().toString();
String filePath=SDCarePath+"/"+"meitu.jpg";
Bitmap rawBitmap1=BitmapFactory.decodeFile(filePath,null);
1.2JEPG圖像壓縮算法
JEPG作為當前通用的一種靜止圖像壓縮標準,不僅可被應用在彩色圖像,還可應用在灰度圖像。其具體的原理則是通過調節圖像的壓縮比,從而實現對圖像大小的壓縮。其具體的壓縮流程則如圖1所示。
1.1圖像讀取準備
對Android手機中的圖片進行壓縮,首先需要將SDcard中的圖片進行讀取,對此在Android中專門開發了API接口,提供了基于圖片操作的Bitmap類。Bitmap類中的構造函數通常被私有化,導致不能結合函數直接創建該類的對象。因此,必須通過輔助的BitmapFactory類對Bitmap實例化,從而制定位置圖片的壓縮。如從Android手機中的SD卡中調用,并對圖片進行壓縮,具體實現的代碼為:
String SDCarePath=Environment.getExternalStorageDirectory

圖1JEPG圖像壓縮處理流程
在JEPG壓縮算法中,包含多種不同的工作模式,而最為常用的為基于8*8的數據塊。而通過圖1可以看出,JEPG圖像流程重要包括以下幾個步驟:
1)顏色模式轉換
在JEPG算法中,需要將圖像中的顏色數據進行轉換。其具體的思路是將傳統的圖像數據RGB轉換為Y″CBCR,其中Y″表示亮度,CB,CR分別為藍色度和紅色度。其具體的轉換為:

通過公式(1)可得到初步壓縮后的圖像藍色度和紅色度。
2)DCT變換
DCT(Discrete Cosine Transform,離散余弦變換),是當前碼率壓縮當中常用的編碼方法。通過DCT變換,將空間域矩陣P轉換為頻率域矩陣T,而該過程是可逆向的。因此,DCT變換包括正向離散余弦變換和反向離散余弦變換兩種。以8*8像素轉換為例,其具體的DCT變換公式為:

通過DCT變換,將壓縮圖片分成為N*N的一個像素塊,然后通過DCT進行逐一編碼操作。
3)量化
通過DCT數據轉換,還必須對圖像進行量化處理,由此才能進行編碼。在量化階段中必須構建兩個8*8量化矩陣,一個處理亮度頻率系數,一個為色度頻率系數,將頻率系數除以量化矩陣,得到計算結果并取整,從而完成整個量化過程。其具體的計算公式為:
量化值(i,j)=[T(i,j)/量化矩陣(i,j)](3)
而在JEPG算法中,對圖像的亮度和色度不同,可得到不同的量化表。本文則對64個DCT系數進行量化,可得到如圖2所示的結果。

圖2 亮度和色度量化表
4)編碼
在進行量化后,需要對AC和DC不同系數采用不同的編碼方式。通常對系數的處理分別運用游程統計編碼、差分計算編碼。DC編碼則是將其系數減去前后系數,從而得到一個系數差值,最后根據該差值,在編碼表當中找到相應的編碼值,將該差值和編碼值連接起來傳入到文件當中。而AC編碼相對比較復雜,需要連續統計并查找其對應的編碼值。如通過采用RLC行程編碼,降低數據本身的傳輸量,將重復出現的連續字符用兩個字節表示,其中第一個為重復的次數,而第二個則為其字符串。如(3,6)就代表字符串為“666”。
對JEPG整體算法流程的設計則如以下步驟:
1)通過BitmapFactory類創建連接,將圖片保存到流對象中;
2)通過Bitmap類對圖像進行初步的壓縮;
3)將圖片數據進行轉換,由原來的RGB格式轉換為;
4)運用JEPG算法對圖像數據進行DCT變換、量化、編碼處理;
5)保存到SD卡中。
除通過上述對圖片的壓縮方式減少Android手機流量之外,還需要將訪問的圖片保存到本地緩存當中。對Android手機用戶來講,如果反復的對某個圖片進行訪問、加載,勢必增加用戶的流量,并減少用戶體驗。因此,需要設計一種緩存策略對手機用戶訪問的圖片進行保存。但是如果將圖片持久化保存勢必增加手機的I/O開銷,會占用系統過多的資源。
而通過分析可以認為,每個圖片都有一個唯一的URL標識,如果網絡圖片出現變化,URL地址也會出現變化。因此針對該思路,提出以下兩種策略:
第一,設定訪問優先級:訪問優先級:內存緩存>磁盤緩存>網絡資源
第二,緩存判定。本文認為將壓縮之后的圖片通過Bitmap類保存到磁盤的緩存文件夾中的時候,其首要是要判定該文件夾的大小是否超出了緩存的最大值。假設存入的文件大小為A,磁盤整體大小為B,當前緩存在該目錄下的文件大小為C,設定的緩存最大值為D,可緩存的文件大小為E。由此有判定公式:

其具體的算法設計則如圖3所示。

圖3 本地緩存實現算法
利用Android中ADT自帶的AVD模擬設備,對上述的算法進行測試。其具體的思路是通過發布測試應用端的Eclispe后臺,對通過上述算法的圖片進行查看,從而觀察不同JEPG壓縮等級下的圖片大小。同時以某餐飲快餐網站為例,該網站其具體的功能界面如圖4所示。

圖4 餐飲軟件界面
該主界面采用TableLayout作為表格布局,對顯示的文本框則采用View類中的Text、Edit等進行編輯。在對圖中的圖片進行上傳的過程中,需要對圖片進行壓縮。同時借助Tomact6.0服務器開啟后臺服務,將圖片進行上傳,最后通過ADT得到壓縮后的相關結果。其具體的壓縮結果則如圖5所示。

圖5JEPG壓縮比較
通過圖5看出,原始圖片與JEPG算法在質量等級下的圖片效果相當,說明隨著壓縮等級質量的增加,壓縮的效果越好,并進一步證明該算法的有效性,即節約了流量,同時提高了圖片上傳的速率。
針對當前Android中經常訪問的圖片資源問題,特別是在休閑生活類等大量下載或上傳的圖片,采用Android中植入JEPG算法和本地緩存方式,大大節約了流量,提高訪問速率,取得良好的效果,對促進移動應用具有重要的作用。
[1]曾健平,邵艷潔.Android系統架構及應用程序開發研究[J].微計算機信息,2011(9):1-3.
[2]差沙,地獄男爵.用Android開發手機應用[J].程序員,2008(1):56-61.
[3]程格平,王毅.一種基于壓縮圖像的反取證方法[J].計算機時代,2015(9):12-13,16.
[4]葉炳發,孟小華.Android圖形系統的分析與移植[J].電信科學,2010(2):65-68.
[5]李瓊,石俊生,毛小群.主觀評價JPEG與JPEG2000標準的彩色圖像最佳壓縮比的實驗研究[J].中國圖象圖形學報,2010(7):1042-1046.
[6]郭利全,謝維波.基于Android平臺的可視對講系統的設計與實現[J].微型機與應用,2012(5):4-7.
[7]武瑛.DCT變換在圖像壓縮中的應用[J].計算機與現代化,2013(4):103-106.
[8]黃西娟,王冰.一種DCT變換域的魯棒數字水印[J].計算機工程,2011(20):145-148.
[9]寧國強,劉媛媛,李鳳堂,張建理.一種基于DWT-DCT變換強魯棒性的數字水印算法[J].電子設計工程,2009(11):67-69.
[10]王永皎,郭力爭.基于DCT變換的圖像壓縮技術研究[J].河南城建學院學報,2013(1):42-46.
[11]胡維青,張艷花.基于JPEG系數的服裝藝術特色圖像庫檢索[J].青島大學學報:自然科學版,2012(4):39-43.
[12]周波,張源,楊珉,等.用代碼緩存復用技術提升Android即時編譯器效率[J].小型微型計算機系統,2013(6):1307-1312.
[13]紀曉陽.線程在Android開發中的應用[J].軟件,2013(8): 24-26,41.
[14]閆偉,葉建栲.多線程技術在android手機開發中的應用[J].信息通信,2012(1):46-47.
[15]焦健.Eclipse下Android環境的搭建[J].信息與電腦(理論版),2012(6):33-34.
Research on image data flow control and buffer technology in Android development
LIANG Li
(Shaanxi Vocational and Technical College of Finance and Economics,Xianyang 712000,China)
Aiming at the problem of the consumption of mobile phone users in the development of Android application program,a new method based on JEPG compression algorithm and local buffer is proposed.JEPG algorithm is transplanted to the Android,so that the network image compression on the Android to achieve the user's mobile traffic control.At the same time,a local cache technology is proposed,which reduces the traffic consumption caused by the repeated requests of users,and enhances the user experience.Finally,the scheme is verified by the experimental platform,and good results are obtained.
Android;JEPG compression algorithm;flow control;local cache;image data
TN0
A
1674-6236(2016)17-0164-03
2015-12-02稿件編號:201512018
梁麗(1979—),女,陜西咸陽人,講師。研究方向:計算機應用教學。