JavaScript实现256色转灰度图


Posted in Javascript onFebruary 22, 2017

一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示" 红,绿,蓝"在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。

灰度化方法:

        1.浮点算法:Gray = R*0.299 + G*0.587 + B*0.114

        2.整数方法:Gray = (R*299 + G*587 + B*114 + 500) / 1000 

        3.移位方法:Gray =(R*28+G*151+B*77)>>8;

        4.平均值法:Gray=(R+G+B)/3;

        5.仅取绿色:Gray=G;

        只要将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的RGB(Gray,Gray,Gray)就完成灰度化了;

效果图:

JavaScript实现256色转灰度图

代码如下:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>ImgBase</title>
 <style type="text/css">
 .scream{
 width:400px;
 height:300px;
 position: absolute;
 top:60px;
 border: 1px solid;
 }
 #canvas{
 position: absolute;
 top:60px;
 left:500px;
 border: 1px dashed;
 }
 </style>
 </head>
 <body>
 <input type="file" onchange="loadImg()"/>
 <input type="button" value="灰度化" onclick="Convert256toGray()"/>
 <br/><br/>
 <div class="scream">
 <img id="scream" width="400px" height="300px" alt="Image preview...">
 </div>
 <canvas id="canvas" width="400px;" height="300px;">
 your browser does not support canvas!
 </canvas>
 <script>
 function Convert256toGray(){
 var c=document.getElementById("canvas");
 var ctx=c.getContext("2d");
 var imgData = ctx.getImageData(0,0,c_w,c_h);
 for (var i=0;i<imgData.data.length;i+=4)
  {
  var R = imgData.data[i]; //R(0-255)
  var G = imgData.data[i+1]; //G(0-255)
  var B = imgData.data[i+2]; //G(0-255)
  var Alpha = imgData.data[i+3]; //Alpha(0-255)
  //浮点算法
  var gray = R*0.299 + G*0.587 + B*0.114;
  //整数算法
//  var gray = (R*299 + G*587 + B*114 + 500) / 1000; 
  //移位算法
//  var gray =(R*76+G*151+B*28)>>8;
  //平均值算法
//   var gray = (R+G+B)/3;
  //仅取绿色
//  var gray=G;
   imgData.data[i] = gray;
   imgData.data[i+1] = gray; 
   imgData.data[i+2] = gray; 
   imgData.data[i+3] = Alpha; 
  }
 ctx.putImageData(imgData,0,0);
 }
 </script>
 <!--base-->
 <script>
 //canvas图像的宽高 
 var c_w = 400; var c_h = 300;
 //加载img图像
 function loadImg(){
 var img = document.getElementById("scream");
 var file = document.querySelector('input[type=file]').files[0];
 if(!/image\/\w+/.test(file.type)){
   alert("文件必须为图片!");
   return false;
  }
 var reader = new FileReader();
 reader.addEventListener("load", function () {
  img.src = reader.result;
 }, false);
 if(file) {
  reader.readAsDataURL(file);
  loadCanvas();
 }
 }
 //加载canvas图像
 function loadCanvas(){
 var c=document.getElementById("canvas");
 var ctx=c.getContext("2d");
 var img = document.getElementById("scream");
 img.onload = function() {
  ctx.drawImage(img,0,0,c_w,c_h);
 } 
 }
 </script>
 </body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
对textarea框的代码调试,而且功能上使用非常方便,酷
Jun 30 Javascript
图片onload事件触发问题解决方法
Jul 31 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
Aug 22 Javascript
JavaScript中“基本类型”之争小结
Jan 03 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
Jan 26 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
JavaScript禁止微信浏览器下拉回弹效果
May 16 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
Feb 11 Javascript
Vue infinite update loop的问题解决
Apr 23 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
JS轻量级函数式编程实现XDM二
Jun 16 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 #Javascript
微信小程序 扎金花简单实例
Feb 21 #Javascript
angular中的http拦截器Interceptors的实现
Feb 21 #Javascript
微信小程序 PHP生成带参数二维码
Feb 21 #Javascript
vue-resource 拦截器使用详解
Feb 21 #Javascript
微信小程序 template模板详解及实例
Feb 21 #Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 #Javascript
You might like
在PHP中执行系统外部命令
2006/10/09 PHP
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python读取表格类型文件代码实例
2020/02/17 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
python全栈开发语法总结
2020/11/22 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
大学生秋游活动方案
2014/02/17 职场文书
借款协议书范本
2014/04/22 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle