分享一段代码,以前在网上找到的。先通过php把js压缩成图片

文件名为hello.js:

1
alert('hello world');//使用简单实例

通如果下面php代码运行压缩hello.js文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/**
 *  @func 把JS文件压缩成图片
 *  这样可以下载速度
 *  @need:GD2支持
 */
ini_set('memory_limit', -1);
set_time_limit(0);
    
$fileName = 'hello.js';//压缩的文件名
//把js文件压缩成图片
function ImgEncode($fn){
    //检测文件是否存在
    if(!file_exists($fn)){
        exit($fn.'文件不存在');
    }
    //文件大小
    $fsize = filesize($fn);
    //计算生成图片的宽度
    $iWidth = ceil(sqrt($fsize/1));
    //生成图片的高度
    $iHeight = $iWidth;
    //生成图片的资源
    $im = imagecreatetruecolor($iWidth, $iHeight);
    $fs = fopen($fn, 'r');//只读打开读取文件内容
    $data = fread($fs, $fsize);//文件内容
    fclose($fs);
    $i = 0;
    for($y = 0; $y < $iHeight; ++$y){
        for($x = 0; $x < $iWidth; ++$x){
            //echo ord($data[$i]);
            $ord = ord($data[$i]);  
            //创建像素点的颜色
            $color = imagecolorallocate($im, $ord, 0, 0);//图像的颜色
            //在图片上以像素点保存数据
            imagesetpixel($im, $x, $y, $color);
            ++$i;
        }
    }
    return $im;
}
   
//解压被压缩的js文件
function ImgDecode($png){
    //检测文件是否存在
    if(!file_exists($png)){
        exit($png.'文件不存在');
    }
    $im = imagecreatefrompng($png);//获取图片的资源
    //图片的宽和高
    list($iWidth, $iHeight) = getimagesize($png);
    //$width = imagesx($im);
    //$height = imagesy($im);//这种方法不是很好
    $temp = '';
    $i = 0;
    for($y = 0; $y < $iHeight; ++$y){
        for($x = 0; $x < $iWidth; ++$x){
            $rgb = imagecolorat($im, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            //$g = ($rgb >> 8) & 0xFF;
            //$b = $rgb & 0xFF;//只取一个值
            $data = chr($r);
            $temp .= $data;
            ++$i;
        }
    }
    //print_r($temp);
    return $temp;
}
   
   
//@func 测试
$im = ImgEncode($fileName);//执行
imagepng($im,'test.png');
?>

在html加载被压缩的图片,在通过js解压得到数据并运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
 *  @func JS解压缩
 *  @need 支持canvas
 */
   
/**
 *  @func 方法
 *  @param fn 文件
 *  @param callback 回调方法
 */
function LoadData(fn, callback){
    //创建对象
    var bCanvas = false;//是否可使用
    var oCanvas = document.createElement('canvas');
    if(oCanvas.getContext){//是否getContext这个功能
        var oCtx = oCanvas.getContext('2d');
        if(oCtx.getImageData){
            bCanvas = true;
        }
    }
       
    if(bCanvas){
        //添加数据图片
        var DataImg = new Image();
        DataImg.style.position = 'absolute';
        DataImg.style.left = '-10000px';
        //图片添加到body中
        document.body.appendChild(DataImg);
        DataImg.onload = function(){
            var iWidth = this.offsetWidth;//图片的宽度
            var iHeight = this.offsetHeight;//图片的高度
            oCanvas.width = iWidth;
            oCanvas.height = iHeight;
            oCanvas.style.width = iWidth + 'px';
            oCanvas.style.height = iHeight + 'px';
            //
            var  oText = document.getElementById('output');
            oCtx.drawImage(this, 0, 0);
            var oData = oCtx.getImageData(0, 0, iWidth, iHeight).data;
            var a = [];
            var len = oData.length;
            var p = -1;
            for(var i=0; i<len;i+=4){
                if(oData[i]>0){
                    a[++p] = String.fromCharCode(oData[i]);
                }
            }
            var strData = a.join('');
            if(callback){
                callback(strData);
            }
            //删除标签
            //document.body.removeChild(DataImg);
        }   
        //加载的图片
        DataImg.src = fn;
    }
    //console.log(oCanvas.getContext('2d'));
}
   
LoadData('./test.png',function(data){
    //查询解压后的代码
    console.log(data);
    //执行代码
    //eval(data);
});

我已经测试成功,好牛B的代码。