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 相关文章推荐
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
Dec 15 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
May 21 Javascript
js中class的点击事件没有效果的解决方法
Oct 13 Javascript
JS实现禁止鼠标右键的功能
Oct 15 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 Javascript
老生常谈ES6中的类
Jul 31 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
使用webpack编译es6代码的方法步骤
Apr 28 Javascript
JS表格的动态操作完整示例
Jan 13 Javascript
前端使用crypto.js进行加密的函数代码
Aug 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实现telnet功能示例
2014/04/08 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
python笔记(2)
2012/10/24 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
python编程的核心知识点总结
2021/02/08 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
几个人围成一圈的问题
2013/09/26 面试题
动态密码技术
2012/10/18 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
教师师德承诺书
2014/03/26 职场文书
初中同学会活动方案
2014/08/22 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
荒岛余生观后感
2015/06/09 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang