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 相关文章推荐
Extjs EditorGridPanel中ComboBox列的显示问题
Jul 04 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
jquery实现鼠标滑过小图查看大图的方法
Jul 20 Javascript
JavaScript实现图片轮播的方法
Jul 31 Javascript
JS克隆,属性,数组,对象,函数实例分析
Nov 26 Javascript
vue.js中Vue-router 2.0基础实践教程
May 08 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
react-native-tab-navigator组件的基本使用示例代码
Sep 07 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 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
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
理解javascript异步编程
2016/01/27 Javascript
JS实现购物车特效
2017/02/02 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
Python实现的弹球小游戏示例
2017/08/01 Python
opencv python图像梯度实例详解
2020/02/04 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
入党自我评价优缺点
2014/01/25 职场文书
大学旷课检讨书
2014/01/28 职场文书
初三学生评语大全
2014/04/24 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
南京导游词
2015/02/03 职场文书
投诉信范文
2015/07/02 职场文书
初三化学教学反思
2016/02/22 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书