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

表1 imgbig表

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


(2)優(yōu)化圖片的相關(guān)核心代碼


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

表3 實驗數(shù)據(jù)

圖1 未優(yōu)化圖片

圖2 優(yōu)化后圖片

圖3 未優(yōu)化1張圖片數(shù)據(jù)庫備份

圖4 優(yōu)化后1張數(shù)據(jù)庫備份

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