根据主题颜色修改图片的颜色
2016-03-07 00:00
337 查看
摘要: 在做一个移动端webapp应用,这里涉及到了,后台定制主题颜色,主题颜色不固定,
为了和对应的ios系统和安卓系统的原生app相对应,
所以我们要做使得图片的颜色也要根据主题颜色像自适应。
图片例如这个:
![](http://static.oschina.net/uploads/img/201603/07160629_U6kI.png)
最后的效果是这样子的
![](http://static.oschina.net/uploads/img/201603/07160629_qojV.png)
具体代码如下所示
欢迎访问我的网站 coolfishstudio.com
为了和对应的ios系统和安卓系统的原生app相对应,
所以我们要做使得图片的颜色也要根据主题颜色像自适应。
图片例如这个:
![](http://static.oschina.net/uploads/img/201603/07160629_U6kI.png)
最后的效果是这样子的
![](http://static.oschina.net/uploads/img/201603/07160629_qojV.png)
具体代码如下所示
var util = { /** * 根据主题颜色修改图片颜色 * @param {[type]} imgUrl 图片url * @param {[type]} rgb_color 主题颜色 * @param {Function} callback 返回值 返回base64 * @return {[type]} [description] */ changeImageColor: function (imgUrl, rgb_color, callback) { var threshold = 114; //默认颜色阀值 为 114 ->和默认图相关 var img = new Image(); img.src = imgUrl; //计算对应的通道值 rgb_color = rgb_color || '#727272'; var newR = parseInt('0x' + rgb_color.substr(1,2)); var newG = parseInt('0x' + rgb_color.substr(3,2)); var newB = parseInt('0x' + rgb_color.substr(5,2)); //图片加载后进行处理 img.onload = function () { var width = img.width, height = img.height, canvas = document.createElement('canvas'), 3ff0 ctx = canvas.getContext('2d'); canvas.width = width; canvas.height = height; // 将源图片复制到画布上 ctx.drawImage(img, 0, 0, width, height); // 获取画布的像素信息 var imageData = ctx.getImageData(0, 0, width, height); var data = imageData.data; // 对像素集合中的单个像素进行循环,每个像素是由4个通道组成,所以要注意 var i = 0; while (i < data.length) { var r = data[i++], g = data[i++], b = data[i++], a = data[i++]; //计算透明度 var alp = (255 - r) / (255 - threshold); //判断是否透明 var isTransparent = (r == 255 && g == 255 && b == 255 && a == 255); if (isTransparent) { data[i - 1] = 0; } else { data[i - 4] = newR; data[i - 3] = newG; data[i - 2] = newB; data[i - 1] = (a !== 255) ? (255 - a) : (alp * 255); //处理透明的图片和不透明的图片 } } // 将修改后的代码复制回画布中 ctx.putImageData(imageData, 0, 0); // 图片导出为 png 格式 var type = 'png'; var imgData = canvas.toDataURL(type); // console.log(imgData); // 生成base64 callback && callback(imgData); }; } }; //使用方式 其中 data、style 为通过api读取的值 util.changeImageColor( data.icon, //'http://127.0.0.1:5555/images/app/mc_forum_main_bar_button1_h.png', style.dz_skin_custom_main_color, //'#f51ca6', function (data) { console.log(data); } );
欢迎访问我的网站 coolfishstudio.com
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 移动端的长按事件
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解