天天看點

在網頁中嵌入Base64編碼檔案

大家可能注意到了,網頁上有些圖檔的src或css背景圖檔的url後面跟了一大串字元,比如:data:image/png;base64, ivborw0kggoaaaansuheugaaaaeaaaakcayaaabidfamaaaagxrfwhrtb2z0d2fyzqbbzg9izsbjbwfnzvjlywr5ccllpaaaahhjrefueno8zjsoxcambfb/ keauffr0cbng3nqpw68arzdalozpppfibhh5eab8b+tlt9myq6i1buqfaq1cksvcxz2acs6406kugpt5/ lckuvgz5bdcsb13zo99zodczgvt4mjjzmvkqcha68iiepb86gaiov8cdadliuqbs7md3waaaabjru5erkjggg%3d%3d。那麼這是什麼呢?這是data uri scheme。

data uri scheme是在rfc2397中定義的,目的是将一些小的資料,直接嵌入到網頁中,進而不用再從外部檔案載入。比如上面那串字元,其實是一張小圖檔,将這些字元複制黏貼到火狐的位址欄中并轉到,就能看到它了,一張1x36的白灰png圖檔。

在上面的data uri中,data表示取得資料的協定名稱,image/png 是資料類型名稱,base64 是資料的編碼方法,逗号後面就是這個image/png檔案base64編碼後的資料。

目前,data uri scheme支援的類型有:

data:,文本資料

data:text/plain,文本資料

data:text/html,html代碼

data:text/html;base64,base64編碼的html代碼

data:text/css,css代碼

data:text/css;base64,base64編碼的css代碼

data:text/javascript,javascript代碼

data:text/javascript;base64,base64編碼的javascript代碼

data:image/gif;base64,base64編碼的gif圖檔資料

data:image/png;base64,base64編碼的png圖檔資料

data:image/jpeg;base64,base64編碼的jpeg圖檔資料

data:image/x-icon;base64,base64編碼的icon圖檔資料

base64簡單地說,它把一些 8-bit 資料翻譯成标準 ascii 字元,網上有很多免費的base64 編碼和解碼的工具,在php中可以用函數base64_encode() 進行編碼,如echo base64_encode(file_get_contents(‘wg.png’));

目前,ie8、firfox、chrome、opera浏覽器都支援這種小檔案嵌入。

舉個圖檔的例子:

網頁中一張圖檔可以這樣顯示:

<img src=“http://www.letuknowit.com/images/wg.png”/>

也可以這樣顯示:

<imgsrc=“data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaakcayaaabidfamaaaagxrfwhrtb2z0d2fyzqbbzg9izsbjbwfnzvjlywr5ccllpaaaahhjrefueno8zjsoxcambfb/keauffr0cbng3nqpw68arzdalozpppfibhh5eab8b+tlt9myq6i1buqfaq1cksvcxz2acs6406kugpt5/lckuvgz5bdcsb13zo99zodczgvt4mjjzmvkqcha68iiepb86gaiov8cdadliuqbs7md3waaaabjru5erkjggg%3d%3d”/>

我們把圖像檔案的内容直接寫在了html 檔案中,這樣做的好處是,節省了一個http 請求。壞處呢,就是浏覽器不會緩存這種圖像。

線上轉換為base64編碼網站:

<a href="http://www.motobit.com/util/base64-decoder-encoder.asp" target="_blank">http://www.motobit.com/util/base64-decoder-encoder.asp</a>

<a href="http://www.vgot.net/test/image2base64.php">http://www.vgot.net/test/image2base64.php</a>

作者:白樹