張祖蓮 ,李景林 ,王命全 ,李少雪 ,任宏宇
(1.新疆氣象局 新疆興農網信息中心,新疆 烏魯木齊 830002;2.新疆維吾爾自治區人大常委會辦公廳,新疆 烏魯木齊 830002;3.河南省許昌市94537部隊司令部,河南 許昌 461101)
互聯網上幾乎所有網頁都由圖片和文字組成,許多大型網站都涉及圖片管理功能的實現。在網絡環境中,由于圖片文件相對較小,因此比音頻和視頻文件更加便于傳輸。在很多應用領域中出現了對專用的網絡環境下圖片數據庫的需求,即利用數據庫平臺實現圖片大量的集中存儲,同時以網絡為連接,通過基于HTTP協議的網絡瀏覽器實現對數據庫(包括圖片數據)的遠程訪問[1]。
網頁中圖片的加載速度直接影響該網頁打開速度。訪問者認為,打開速度較快的網站質量更高、更可信、也更有趣;網頁打開速度越慢,訪問者的心理挫折感就越強,就會對網站的可信性和質量產生懷疑。
基于以上情況,如何有效提高網站頁面打開速度,是每個網站管理者和開發人員非常關注和必須解決的問題。本文通過對數據庫如何存取圖片的研究,提出了一種優化算法。
目前網頁上的圖片存儲一般有兩種方法:
(1)將圖片以獨立文件的形式存放至服務器中,同時在數據庫對應表中的文本類型字段中存放該圖片的文件路徑[2]。這種方法具有縮小數據表,提高數據庫相關操作速度且容易編程實現的優點,但是卻造成了圖片及其描述信息的分離,如果數據過期或不用而刪掉,對應圖片沒有刪掉,仍占著服務器空間[1]。
(2)將圖片直接放入數據庫對應表的image數據類型字段中,使得圖片和數據描述成為一個整體[3]。這種方法存放的圖片格式很靈活,管理很方便,而且安全性也很好,最重要的是,如果過期或不用的數據刪掉,對應的所有圖片及相關信息也都刪掉,不再占用服務空間。但是如果圖片越大,占用數據庫存儲空間也越大,網頁打開加載圖片也就越慢[1]。
在目前的研究中,采用第二種方法存取圖片時,基于移動設置優化PNG圖片,在PNG圖片的數據結構中,部分數據塊是可選的,剔除可選數據段,對PNG進行適當的處理,可以有效減少占用空間,優化移動設備上的圖片應用。圖片處理前后的大小相差很多,結果很不穩定[4]。
本文采用第二種存取圖片的方法,針對圖片占用數據庫存儲空間過大、網頁加載圖片過慢的問題,提出了優化圖片算法。
本實驗采用轉換為二進制的方式將圖片文件的全部數據存儲到image[5-6]字段中,使用時再通過特定的過程將二進制信息轉換成原來格式的文件內容,從而真正地實現數據的整體存儲,避免了平臺更換和數據移植時可能帶來的記錄失效問題。
(1)在數據庫SQL 2005中建立testimgbig和testimgsmall兩個數據庫;
(2)在兩個數據庫中分別建表 imgbig和 imgsmall,如表1和表2所示;

表1 imgbig表

表2 imgsmall表
(3)分別在兩個數據庫中建立Addimgbig和 Addimgsmall兩個存儲過程。
本實驗采用C#編程語言,Visual Studio 2005開發工具,Microsoft SQL Server 2005數據庫以及 IIS5.0,在服務器的網站根目錄下建立“tmpimages”及兩個子文件夾“img1”和“img2”。
(1)未優化圖片存入數據庫流程。將本地圖片上傳到服務器“tmpimages/img1”文件夾下,在服務器端將上傳的圖片轉化為字符流存入數據庫;
(2)優化圖片存入數據庫流程。本地圖片上傳到服務器“tmpimages/img1”文件夾下,在服務器端將上傳的圖片進行優化處理,然后將圖片存到服務器“tmpimages/img2”文件夾下,同時將“img2”中剛優化的圖片轉化為字符流存入數據庫;
(3)讀取圖片流程。連接圖片所在數據庫,找到此圖片表名及字段,然后將對應圖片ID號的字符流轉化為可視圖片。
(1)將圖片存入數據庫的相關核心代碼


(2)優化圖片的相關核心代碼


頁面加載時間測試方法:用秒表在本地機上測試。測試未優化和優化后各20次,去掉差距較大的4個,然后取平均數。
圖片選用使用數碼相機拍攝的未處理的圖片 (主要是為了更容易測試算法有效性),上傳的所有圖片都是同一張圖片,以便于比較。
進行數據庫備份。當備份到 1、10、20張圖片時,分別備份一次。
實驗結果如表3所示,部分數據如圖1~圖4所示,測試頁面如圖5所示。

表3 實驗數據

圖1 未優化圖片

圖2 優化后圖片

圖3 未優化1張圖片數據庫備份

圖4 優化后1張數據庫備份

圖5 測試頁面
在測試頁面中,未優化圖片和優化圖片的顯示從視覺上效果一樣,并沒有出現因為壓縮而丟失像素模糊現象。
由以上數據可以看出,本文提出的存取圖片優化算法是一種有效的圖片壓縮、優化方法,同時能節省數據庫容量,明顯提高了網頁加載圖片速度。在服務器的“img1”和“img2”文件夾中的圖片可以定期刪除掉,不占用服務器空間。
本文測試是在本機上進行的,用了同一張原圖片測試,明顯看出頁面加載時間的差距和數據庫的容量。大型網站有更多圖片,如果采用優化算法,將大大減少頁面加載時間和數據庫容量,同時不占用服務器空間,有效提高網頁打開速度。
本算法在基于Web網站開發中對圖片處理?具有很高的實用價值,用C#、Java語言開發網站都可以借鑒此算法。本文只是在本機上用該算法對少量圖片進行測試,當有大數據量時,該算法效果將更加明顯。雖然圖片的像素降低從視覺效果上差別不大,但如果對圖像精確度要求特別高還有待考慮,該算法還有待不斷改進和優化。
[1]李偉民,何偉,李平.基于 Web的 SQLServer數據庫存取圖片的 Delphi實現 [J].計算機工程與設計,2007,28(12):2943-2945.
[2]戰仁軍,張明書.圖像文件在數據庫中的存取[J].西安工程科技學院學報,2003,17(4):369-372.
[3]張永仁,黃科軍,李德孝.基于數據庫的文件管理[J].計算機工程與設計,2006,27(11):2044-2045.
[4]徐逸卿,劉林.基于移動設備的PNG圖片優化實現[J].多媒體技術及應用,2008,3(9):2070-2075.
[5]郭東青,李佳,劉彬彬.數據庫創建、數據倉庫與優化[M].北京:清華大學出版社,2001.
[6]古凌風.用ADO技術實現數據庫圖像字段的存取[J].計算機工程與設計,2004,25(8):1388-1392.