摘要:XML技術廣泛應用于數據庫和在網絡傳輸。但是XML主要適用于文本數據,所以對于圖形數據一般是分開傳輸的,從而改變了傳輸的統一性。該文提出了一種圖像轉換的方法,從而實現了圖像在XML中的傳輸。
關鍵詞:基于XML;圖像傳輸;圖像編碼
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2011)04-0873-02
A Method of Image Storage Based on XML
HAO Wei1, HAN Ying2
(1.Anhui University of Science and Technology, Huainan 232001, China; 2.Yancheng Teachers University, Yancheng 224002, China)
Abstract: XML has been widely used in different areas, such as database and network. XML is just designed for txt files, so the images and binary files are transferred by other mains and the unity of transfer has been changed. This article gives a new way of image transfer based on XML.
Key words: XML-based; image transfer; image coding
XML(Extensible Markup Language)即可擴展標記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標準通用標記語言),即使用標記對內容進行區分。由于Xml是Internet環境中跨平臺的,依賴于內容的技術,是當前處理結構化文檔信息的有力工具。
與同樣是標記語言的HTML相比,XML是專門用來存儲數據的,重在數據本身,而HTML是用來定義數據的,重在數據的顯示模式。
由于XML使用了大量的標記符,所以使用XML會占用更多的空間,但由于XML極其簡單易于掌握和使用,加上現在硬件技術和軟件水平的不斷發揮,所以XML已經廣泛應用于數據庫技術和網絡傳輸中。
1 問題
圖形和圖片在Internet中,是最常見到的文件格式,圖片都是使用二進制進行存儲,所以如果在基于文本的XML文件中傳輸的話,就很可能是破壞XML的內容。如,在二進制數據中,如果正好包含 “<>”這樣的標記,原XML文件的內容就很可能會被破壞,接收端就無法正確的解析XML數據,從而造成數據傳輸的失敗,所以一般圖片都是與文本分開傳輸的。然而數據分開傳輸雖然能解決問題,但是傳輸的統一性就會被破壞,而且存儲也需要在不同的空間完成,對于一些有一定安全性要求的場合就會不太適用。
2 分析
圖形和圖片在Internet中,是最常見到的文件格式,其編碼都是使用二進制進行的,如最基本的Bitmap位圖文件,一般使用RGB三個通道,每個通道表示一種顏色的方式表示一個字節,文件大小為長*寬*3+54,當然網絡傳輸從效率的角度考慮,更多的是經過壓縮的JPG或GIF格式。
但是無論使用哪種格式,最終是二進制的代碼,這樣有很大的不可控性,二制度碼包括了所有的ASCII碼,所以有很大的可能性會出錯,所以如果能對二進制碼進行轉換,將其轉換至某個指定的ASCII碼的空間問題即可解決。
一個字節所能表示的范圍是0-255,而ASCII所常用的空間是數字:48-57,大寫字母:65-90和小寫字母97-122,所以一對一的映射是沒有辦法實現的,因為映射空間不足,即實現映射以后無法還原原數據。
所以在這里使用了2個字節表示一個二進制碼的方式,這樣即可解決問題。
3 算法設計與實現
將圖片文件中的數據的每個字節轉換成可識別的ASCII碼,最常見的方法即可將1個字節二進制數據轉換為2位的16進制碼,0-255對應00-ff,如63對應3f,64對應40,255對應ff。根據此原理編寫代碼,以下代碼均以C#代碼為例。
3.1 編碼:將數據轉換為編碼后的字符串
對每個字節的編碼直接使用ToString(“x”)將其轉換為2位的16進制碼,小于16的只有1位補“0”,湊成2位。
3.2 解碼:將編碼后的字符串轉換為原數據
對字符串進行解碼,每2位還原成1位原數據,每次解碼如果是數字(值在48-57之間),則直接減去48,如果是字母(值在97-122之間)則減去87。然后再將2個值合并,計算公式為:
b = t*16 + t1,其中b為原值,t為解碼后的高位,t1為解碼后低位。
4 應用示例
現在有一張圖片:,其長*寬為16*11,大小為472個字節,將原文件的數據打開保存到一個XML的標記符內后,數據如下所示。
這樣的數據里包括”<”, “>”等非法字符,所以很可能會導致解析失敗,現在將其轉換后,以小寫字母和數字的形式出現,重新編碼后的XML文件如下所示。
這樣經過編碼以后,再使用XML就不會出現任何問題。
5 總結
本方指出了一種方法,將二進制的圖片轉換為可識別的字符串,從而實現了在XML中傳輸圖片。不過本方法也有不足,就是數據的大小會變為原來的2倍,在對傳輸速度要求不高的場合完全可以合適,但是對要求較高的場合會有一定影響,這個問題可以再分析通過一些辦法進一步解決。
參考文獻:
[1] 萊維丁.算法設計與分析基礎[M].北京:清華大學出版社,2007.
[2] 李家同.算法設計與分析導論[M].北京:機械工業出版社,2008.
[3] 呂國英.算法設計與分析[M].2版.北京:清華大學出版社,2009.