成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

想不到的將JS文件壓縮成PNG圖像存儲方法

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

你有沒有想過:為了壓縮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寫的壓縮文件地址。

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

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

當(dāng)然,除了壓縮,還要有解壓縮,也就是將圖像讀取為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<len;i+=4) {  
  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.     }  

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

原文鏈接:http://www.cnblogs.com/ilian/archive/2012/06/21/js-to-png.html

【編輯推薦】

責(zé)任編輯:張偉 來源: 愛蓮學(xué)堂的博客
相關(guān)推薦

2009-02-24 09:06:06

減薪裁員降低成本

2016-11-02 00:15:31

2009-02-05 11:10:25

裁員思科

2023-05-08 10:29:17

模型論文

2012-10-11 15:16:44

聯(lián)想LJ2400黑白激光打印機

2012-08-16 16:36:19

Informatica大數(shù)據(jù)云計算

2023-12-13 14:26:29

2013-03-26 11:09:16

iOS快速將顯卡中數(shù)據(jù)cocos2dx擴展

2012-07-11 10:38:34

JavaScript

2019-07-01 14:39:44

Jupyter擴展Python

2013-11-12 15:40:40

圖像壓縮

2022-08-08 08:29:55

圖片壓縮前端互聯(lián)網(wǎng)

2009-04-18 06:23:33

Linux漫畫

2021-07-07 05:22:21

微信視頻壓縮視頻

2011-07-28 10:10:31

Linux

2017-06-01 16:20:08

MySQL復(fù)制延遲數(shù)據(jù)庫

2019-09-04 09:00:00

LinuxPngquantr工具

2023-06-27 09:22:25

2015-05-05 11:00:13

大數(shù)據(jù)時代創(chuàng)意

2012-05-03 15:01:24

數(shù)值壓縮
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩成人在线观看 | 伊人二区 | 色姑娘av | 国产精品乱码一区二区三区 | 天天艹 | 国产一区二区精品在线观看 | 国产小视频在线 | 欧美日韩免费 | 亚洲精品福利在线 | 成人在线网| 麻豆久久久久久久久久 | www.性色 | 亚洲视频中文字幕 | 欧美日韩精品免费 | 欧美日韩在线一区二区 | 久久新视频 | 精品视频一区二区三区在线观看 | 国产网站久久 | 久久亚洲综合 | av免费入口 | 1区2区3区视频 | 国产精品久久久久久吹潮日韩动画 | 欧美一区二区 | 性在线 | 亚洲视频一 | 日韩在线视频免费观看 | avhd101在线成人播放 | 精品久久久久久亚洲综合网站 | 伊人激情网 | 亚洲欧美视频在线观看 | 天天操精品视频 | 欧美伊人久久久久久久久影院 | 一区二区三区精品视频 | 日韩欧美亚洲 | 免费精品国产 | 日韩日韩日韩日韩日韩日韩日韩 | 北条麻妃一区二区三区在线观看 | 精品久久影院 | 成人综合视频在线观看 | 91精品国产综合久久久久久丝袜 | 犬夜叉在线观看 |