日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
想不到的將JS文件壓縮成PNG圖像存儲方法

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

創(chuàng)新互聯(lián)建站是專業(yè)的萬寧網(wǎng)站建設公司,萬寧接單;提供成都做網(wǎng)站、網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行萬寧網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

這樣可以做到很高的壓縮比,到底有多高,下面會提到。這種方法用到了 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寫的壓縮文件地址。

 
 
 
 
  1. $filename = "prototype-1.6.0.2.js";
  2. if (file_exists($filename)) {
  3.     $iFileSize = filesize($filename);
  4.     $iWidth = ceil(sqrt($iFileSize / 1));
  5.     $iHeight = $iWidth;
  6.     $im = imagecreatetruecolor($iWidth, $iHeight);
  7.     $fs = fopen($filename, "r");
  8.     $data = fread($fs, $iFileSize);
  9.     fclose($fs);
  10.     $i = 0;
  11.     for ($y=0;$y<$iHeight;$y++) {
  12.         for ($x=0;$x<$iWidth;$x++) {
  13.             $ord = ord($data[$i]);
  14.             imagesetpixel($im, 
  15.                 $x, $y,
  16.                 imagecolorallocate($im,
  17.                     $ord,
  18.                     $ord,
  19.                     $ord
  20.                 )
  21.             );
  22.             $i++;
  23.         }
  24.     }
  25.     header("Content-Type: image/png");
  26.     imagepng($im);
  27.     imagedestroy($im);
  28. }
  29. ?>

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

當然,除了壓縮,還要有解壓縮,也就是將圖像讀取為JS文件的過程。這個函數(shù)是用JS寫的,可以從下面的位置下載這個文件。

 
 
 
 
  1. function loadPNGData(strFilename, fncCallback) {
  2.     // test for canvas and getImageData
  3.     var bCanvas = false;
  4.     var oCanvas = document.createElement("canvas");
  5.     if (oCanvas.getContext) {
  6.         var oCtx = oCanvas.getContext("2d");
  7.         if (oCtx.getImageData) {
  8.             bCanvas = true;
  9.         }
  10.     }
  11.     if (bCanvas) {
  12.         var oImg = new Image();
  13.         oImg.style.position = "absolute";
  14.         oImg.style.left = "-10000px";
  15.         document.body.appendChild(oImg);
  16.         oImg.onload = function() {
  17.             var iWidth = this.offsetWidth;
  18.             var iHeight = this.offsetHeight;
  19.             oCanvas.width = iWidth;
  20.             oCanvas.height = iHeight;
  21.             oCanvas.style.width = iWidth+"px";
  22.             oCanvas.style.height = iHeight+"px";
  23.             var oText = document.getElementById("output");
  24.             oCtx.drawImage(this,0,0);
  25.             var oData = oCtx.getImageData(0,0,iWidth,iHeight).data;
  26.             var a = [];
  27.             var len = oData.length;
  28.             var p = -1;
  29.             for (var i=0;i
  30.                 if (oData[i] > 0)
  31.                     a[++p] = String.fromCharCode(oData[i]);
  32.             };
  33.             var strData = a.join("");
  34.             if (fncCallback) {
  35.                 fncCallback(strData);
  36.             }
  37.             document.body.removeChild(oImg);
  38.         }
  39.         oImg.src = strFilename;
  40.         return true;
  41.     } else {
  42.         return false;
  43.     }
  44. }

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


新聞標題:想不到的將JS文件壓縮成PNG圖像存儲方法
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/dhseodi.html