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 相关文章推荐
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
Javascript执行效率全面总结
Nov 04 Javascript
jQuery中even选择器的定义和用法
Dec 23 Javascript
JavaScript更改字符串的大小写
May 07 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
javascript实现延时显示提示框特效代码
Apr 27 Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 Javascript
详解Puppeteer前端自动化测试实践
Feb 21 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
JavaScript实现淘宝商品图切换效果
Apr 29 Javascript
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
在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邮件类
2007/01/03 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
javascript事件模型代码
2007/07/01 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
canvas的神奇用法
2017/02/03 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
Javascript实现秒表倒计时功能
2018/11/17 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
python函数的5种参数详解
2017/02/24 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
超市周年庆活动方案
2014/08/16 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
Ajax实现三级联动效果
2021/10/05 Javascript
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android