posts - 101,  comments - 29,  trackbacks - 0

          你有沒有想過:為了壓縮js文件,把js文件轉(zhuǎn)化成PNG圖像,然后用 canvas 控件中的 getImageData() 函數(shù)將圖像再重新讀成js文件。我昨天在這里發(fā)表的JS文件快速加載的文章中提到了這一方法,有網(wǎng)友對這個做法很感興趣,于是今天詳細解讀一下。

          這樣可以做到很高的壓縮比,到底有多高,下面會提到。這種方法用到了 canvas 控件,這也意味著只有支持 canvas 控件的瀏覽器下才有效。

          現(xiàn)在你可以看到,上面的圖像類似一個噪聲圖像,但它實際上是一個由124K的 prototype 框架代碼轉(zhuǎn)化成的30K的8位PNG圖像(壓縮比還不錯吧)。

          其實,要將代碼轉(zhuǎn)化為圖像的格式存儲,可以轉(zhuǎn)化成GIF和PNG格式。PNG格式的圖像有24位和8位,用24位的RGB圖像,每個像素可以存儲3字節(jié)的數(shù)據(jù),如果是用8位的RGB圖像,每個像素可以存儲1字節(jié)的數(shù)據(jù)。

          在PHOTOSHOP中做測試發(fā)現(xiàn):一個300x100的純色雜點8位圖像可以壓縮到5K,而同樣的純色雜點圖像,如果是100x100的24位圖像只能壓縮到20K。如果是同樣圖案的8位GIF圖像,壓縮效果比PNG要差一些。所以,我們選擇用8位的PNG圖像作為壓縮和解壓縮的存儲格式。

          現(xiàn)在,我們就需要開始壓縮圖像了,下面是用PHP寫的壓縮文件地址。
          http://www.cleanthem.com/code/20120620/js-to-png.txt

          它讀取JS文件并創(chuàng)建一個PNG圖像,圖像中的每個像素中是一個0-255之間的值,而這個值對應(yīng)的是JS字符的ascII的值。

          當(dāng)然,除了壓縮,還要有解壓縮,也就是將圖像讀取為JS文件的過程。這個函數(shù)是用JS寫的,可以從下面的位置下載這個文件。
          http://www.cleanthem.com/code/20120620/pngdata.txt

          最后給出在線測試地址,在這個網(wǎng)頁上,您可以在列表中選擇一個PNG圖像文件,點擊 load file 按鈕可以在網(wǎng)頁上看到這個圖像,在圖像的下面是由這個圖像所讀出來的代碼文件。

          http://www.nihilogic.dk/labs/canvascompress/

           

          注:轉(zhuǎn)載請注明出處,覺得有用就推薦一下吧~

          posted on 2012-08-05 01:26 mixer-a 閱讀(2338) 評論(4)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 屏南县| 茶陵县| 万山特区| 都匀市| 阜平县| 东方市| 封丘县| 蒲城县| 绥滨县| 军事| 新安县| 丁青县| 女性| 灌南县| 烟台市| 方城县| 宣城市| 济阳县| 桐乡市| 廊坊市| 张家川| 彰化县| 马边| 东源县| 安阳县| 邳州市| 静海县| 邯郸县| 阜康市| 萨嘎县| 高青县| 阿瓦提县| 盐津县| 衡水市| 鹤峰县| 沾益县| 芷江| 故城县| 嘉兴市| 亳州市| 邹平县|