代码=图片
图片=代码
JS代码对于喜欢F12的同志来说,连个遮羞布都没有。。。
虽然把代码变成图片也仅仅只是增加一层纱布而已。。。但这方法还是挺好玩的,而且代码也被压缩了一点。
第一次看到[图片=代码]的想法,是在一个演示视屏拼图的博客里看到的。
最近有点闲,想起了这个,就试了试。
对于中文等字符,需要先转为十六禁止后,再转为图片的RGB像素
document.write(escape("字") ); //%u5B57
document.write(unescape("%u5B57"));
---
在线地址:
http://wangxinsheng.herokuapp.com/imageData
完整未压缩,未混淆免费代码:
http://download.csdn.net/detail/wangxsh42/8551511
下面的是jquery 1.9.1的代码图片:
---
代码段:
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="html5 js2png">
<meta name="keywords" content="html5,canvas,png,js">
<meta name="author" content="WangXinsheng">
<title>CopyRight©WangXinsheng</title>
<script src="jquery-1.9.1.min.js"></script>
<style type="text/css">
</style>
</head>
<body>
<p>
javascript:<br />
<textarea id='js' rows="5" cols="50">
function a(arg){alert(arg)};
a("hello world!");</textarea>
<br />
<button id='topng' type="button">2png</button>
<button id='tojs' type="button">2js</button>
<button id='canvastoimg' type="button">c2img</button>
<button id='runjs' type="button">run Js</button>
<button id='clear' type="button">clear</button>
</p>
<p>
picture:<br />
<input id='pngFile' type="file" onchange="onPngFileChange(this)" /><br />
<canvas id="png" width='10' height='10'></canvas>
<img id="pngImg" />
</p>
</body>
<script src="data:imageData.js"></script>
</html>
JS:
//将js代码编码为图片
function toPng(jsorg){
var canvas = document.getElementById("png");
var context = canvas.getContext("2d");
var width = Math.ceil(Math.sqrt(jsorg.length / 3));
var height = width;
$("#png").attr("width",width).attr("height",height);
$("#png").width(width).height(height);
var imageData = context.createImageData(width, height); var a = stringToHex(jsorg);
var arr = a.split(",");
for(var i = 0,j=0;j<width*height*4;i++,j++){
if((j+1)%4==0){
imageData.data[j]=255;
j++;
}
if(i<arr.length)
imageData.data[j] = arr[i];
}
//console.log(imageData.data);
context.putImageData(imageData, 0, 0);
}
//解析图片为js代码
function tojs(canvasId){
var canvas = document.getElementById(canvasId);
var context = canvas.getContext("2d");
var width = $("#"+canvasId).width();
var height = $("#"+canvasId).height();
var imageData = context.getImageData(0, 0, width, height);
//console.log(imageData.data);
var str = "";
for(var i = 0;i<imageData.data.length;i++){
if((i+1)%4==0)
continue;
str += imageData.data[i]!=0?hexToString(imageData.data[i]):'';
}
$("#js").val(str);
}
也可以添加私钥加密功能[添偏移量即可]
---
原理:
字符可以转为16进制,与图片RGB的一个R/G/B相对应,即一个像素点可容纳3个字符
注:Canvas的RGBA,透明度A似乎不能使用,使用后,RGB会有所变化,造成无法正确解码。
具体原理可参考:http://www.qingdou.me/2170.html