将js/css脚本放到png图片中的实践。
将js/css脚本放到png图片中的实践。
版权声明:本文为博主原创文章,未经博主允许不得转载。

需要处理的问题:
解决方案就是:一个像素存放三个字符并将alpha固定为255。

第二轮demo测试符合预期。
5、存为png图片。
代码示例
- <textarea id="base64"></textarea>
- <script>
- function encodeUTF8(str) {
- return String(str).replace(
- /[\u0080-\u07ff]/g,
- function(c) {
- var cc = c.charCodeAt(0);
- return String.fromCharCode(0xc0 | cc >> 6, 0x80 | cc & 0x3f);
- }
- ).replace(
- /[\u0800-\uffff]/g,
- function(c) {
- var cc = c.charCodeAt(0);
- return String.fromCharCode(0xe0 | cc >> 12, 0x80 | cc >> 6 & 0x3f, 0x80 | cc & 0x3f);
- }
- );
- }
- function request(url, loaded) {
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function() {
- if (xmlhttp.readyState == 4)
- if (xmlhttp.status == 200)
- loaded(xmlhttp);
- }
- xmlhttp.open("GET", url, true);
- xmlhttp.send();
- }
- void function(){
- var source = 'tangram-1.5.0.js';
- request(source, function(xmlhttp){
- var text = encodeUTF8(xmlhttp.responseText);
- var pixel = Math.ceil((text.length + 2) / 3); // 1一个像素存3个字节,
- var size = Math.ceil(Math.sqrt(pixel));
- //console.log([text.length, pixel, size, size * size * 3]);
- var canvas = document.createElement('canvas');
- canvas.width = canvas.height = size;
- var context = canvas.getContext("2d"),
- imageData = context.getImageData(0, 0, canvas.width, canvas.height),
- pixels = imageData.data;
- for(var i = 0, j = 0, l = pixels.length; i < l; i++){
- if (i % 4 == 3) { // alpha会影响png还原
- pixels[i] = 255;
- continue;
- }
- var code = text.charCodeAt(j++);
- if (isNaN(code)) break;
- pixels[i] = code;
- }
- context.putImageData(imageData, 0, 0);
- document.getElementById('base64').value = canvas.toDataURL("image/png");
- });
- }();
- </script>

代码示例
- <script>
- void function(){
- var source = 'tangram-1.5.0.png';
- var img = document.createElement('img');
- img.onload = function(){
- var canvas = document.createElement('canvas');
- canvas.width = img.width;
- canvas.height = img.height;
- var context = canvas.getContext("2d");
- context.drawImage(img, 0, 0);
- var imageData = context.getImageData(0, 0, canvas.width, canvas.height),
- pixels = imageData.data;
- var script = document.createElement('script');
- var buffer = [];
- for (var i = 0, l = pixels.length; i < l; i++) {
- if (i % 4 == 3) continue; // alpha会影响png还原
- if (!pixels[i]) break;
- buffer.push(String.fromCharCode(pixels[i]));
- }
- script.src = 'data:text/javascript;charset=utf-8,' + encodeURIComponent(buffer.join(''));
- document.body.appendChild(script);
- script.onload = function(){
- alert(T.date.format(new Date, 'yyyy年M月d日'));
- }
- img = null;
- }
- img.src = source;
- }();
- </script>
优势
将js/css脚本放到png图片中的实践。的更多相关文章
- MVC 中如果js,css文件放到视图文件夹无法访问的解决办法
在视图配置文件web.config 中添加如下节点,注意:此web.config 是视图文件夹中的,在你的views视图中可以找到<system.webServer>开头的<hand ...
- 自写脚本实现上线前本地批量压缩混淆 js , css 代码。
最近做项目遇到一个要求,就是把本地的 js 和 css 进行压缩后再上线,由于之前项目并没有使用 webpack 之类的库,项目上也因为一些机密不能在线上压缩,这无疑给代码打包压缩带来了很大麻烦,于是 ...
- JS&CSS文件请求合并及压缩处理研究(五)
接上篇.在我们最终调用 @Html.RenderResFile(ResourceType.Script) 或者 @Html.RenderResFile(ResourceType.StyleSheet) ...
- iOS之在webView中引入本地html,image,js,css文件的方法 - sky//////////////////////////////////////ZZZZZZZZZZZZZZZ
iOS之在webView中引入本地html,image,js,css文件的方法 2014-12-08 20:00:16CSDN-sky_2016-点击数:10292 项目需求 最近开发的项 ...
- ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩
JS/CSS文件的打包合并(Bundling)及压缩(Minification)是指将多个JS或CSS文件打包合并成一个文件,并在网站发布之后进行压缩,从而减少HTTP请求次数,提高网络加载速度和页面 ...
- JS&CSS文件请求合并及压缩处理研究(一)
在我们日常的网站开发工作中,一个页面难免会引用到各种样式及脚本文件.了解Web开发的朋友们都知道,页面引用的每一个: <link href="style.css" rel=& ...
- ASP.NET MVC 4使用Bundle的打包压缩JS/CSS
打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...
- 实用js+css多级树形展开效果导航菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js+css实现带缓冲效果右键弹出菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- STP基本概念及实验
相关命令(华为交换机): stp enable(在交换机开启stp:stp使能) display stp 查看stp状态 stp mode stp/rstp/mstp 启用stp/rstp/mstp ...
- ubuntu下可用的串口调试工具--cutecom
今天在ubuntu下要用到串口发送16进制数据,百度了很多工具,觉得minicom和cutecom都不错,比较直观是cutecom,所以就介绍下cutecom. 安装: 输入 $ sudo apt-g ...
- Linux命令行基础操作
目录 1.打开终端命令行 2.常用快捷键 2.1 tab键 2.2 Ctrl+c组合键 2.3 Ctrl+d组合键 2.4Ctrl+Shift+c组合键和Ctrl+Shift+v组合键 2.5图形界面 ...
- Python 学习笔记17 文本 - 读写
在我们的编程过程中,我们经常需要对文件进行读写操作. 在Python中,对文本的读写非常的方便,只需要简单的几行代码就可以实现. 我们首先新建一个文本文件"Text.txt", 里 ...
- MySQL基础(查)
#新建一个表create database exercise; #查询表的信息SELECT * FROM student;SELECT * FROM score; #查询student表的第二条到第四 ...
- GNU MAKE 笔记
最近在调试OJ, 忙了4天多, 最后的问题是judge模块不能正常工作. judge 模块就是两个C++源文件, 它的工作是 从数据库获取用户提交的源码 测评 将测评结果写到数据库 测评部分是与数据库 ...
- Python入门习题7.分别统计输入各类字符个数
例7.用户从键盘输入一行字符,编写一个程序,统计并输出其中的英文字符(包括中文字符).数字.空格和其他字符个数. #字符数统计.py Str = input('请输入一行字符:') alpha = 0 ...
- 【五一qbxt】day7-1 引水入城
[noip2010 洛谷p1514]引水入城 Before: 线段覆盖问题#1:(我们所需要的) 一个区间,若干条线段,现在求最少多少条线段覆盖满整个区间 区间长度8,可选的覆盖线段[2,6],[1, ...
- kvm扩容home目录
KVM虚拟磁盘扩容 1.磁盘扩容分为raw和qcow2两种扩容方式,命令相同,区别是后缀名 [root@daixuan ~]# qemu-img info /data/daixuan1.qcow2 / ...
- 标签的增加、删除与复制,动态标签js不生效的解决
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...