JavaScript如何对图片进行黑白化


Posted in Javascript onApril 10, 2018

HTML5推出了<canvas>元素,使我们可以通过js动态的在 <canvas> 这个区域之中进行图像的绘制。而我们这次对图像的黑白化就是使用js操作<canvas>元素 来实现的。

先看一下效果图

JavaScript如何对图片进行黑白化

左侧为 img标签 , 右侧为 canvas 元素标签,结构如下

<img src="1.jpg" style="width: 200px; height: 199px"/>
<canvas id="drawing" width="200" height="199" ></canvas>

JS的代码很简单, 只有20多行 ,不过本着授人与鱼不如授人于渔的态度,源码会贴到最下面,我们先说理论。

1、关于图片

 大家应该都知道,所谓图片是由一个个的像素点组成的,也就是说一个 300*300大小的图片,共有300*300的像素点,而每一个像素点都是由三原色(red,green,blue)加透明度(alpha)来组成。所以说如果我们希望改变图像的图像数据,其实就是改变图像每一个像素点的数据。

2、关于API

我们通过 var drawing = document.getElementById('drawing'); 这个方法可以拿到 canvas对象,canvas对象提供了 2D、3D两种绘图方式,这里我们使用2D绘图
 使用 context2d = drawing.getContext('2d'); 方法获得context2d对象。拿到context2d对象之后,我们通过context2d提供的方法getImageData(),来获取图像数据,getImageData()有4个参数,分别表示画面区域的 x 和 y 坐标以及该区域的像素宽度和高度 var imagedata = context2d.getImageData(0, 0, image.width, image.height); 

 ImageData 对象都有三个属性:width、height 和
data。其中 data 属性是一个数组,保存着图像中每一个像素的数据。并通过,red,green,blue,alpha来表示。那么我们如果想要改变图像的图像数据,就需要改变 imagedata的data属性数据,改变 red,green,blue,alpha 的值。

这里是源代码

function drawImageData () {
      var context2d = null;
      if(drawing.getContext) {
        context2d = drawing.getContext('2d');
      }
      if (context2d == null) {
        return;
      }
      var image = document.images[0];
      context2d.drawImage(image, 0 , 0);
      var imagedata = context2d.getImageData(0, 0, image.width, image.height);
      var data = imagedata.data;
      console.log('data: ' + data);
      var i,len,red,green,blue,alpha,average;
      for (i = 0 , len = data.length; i < len; i+=4) {
        red = data[i];
        green = data[i + 1];
        blue = data[i + 2];
        alpha = data[i + 3];
        average = Math.floor((red + green + blue) / 3);
        data[i] = average; 
        data[i+1] = average; 
        data[i+2] = average;
      }
      imagedata.data = data;
      context2d.putImageData(imagedata, 0, 0);
    }

总结

以上所述是小编给大家介绍JavaScript如何对图片进行黑白化,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Array对象方法参考
Oct 03 Javascript
javascript 密码强弱度检测万能插件
Feb 25 Javascript
JavaScript.Encode手动解码技巧
Jul 14 Javascript
javascript判断用户浏览器插件安装情况的代码
Jan 01 Javascript
JavaScript instanceof 的使用方法示例介绍
Oct 23 Javascript
jQuery Migrate 1.1.0 Released 注意事项
Jun 14 Javascript
jquery实现侧边弹出的垂直导航
Dec 09 Javascript
Vue组件化通讯的实例代码
Jun 23 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
记一次用vue做的活动页的方法步骤
Apr 11 Javascript
toString.call()通用的判断数据类型方法示例
Aug 28 Javascript
详解ES6中class的实现原理
Oct 03 Javascript
axios 处理 302 状态码的解决方法
Apr 10 #Javascript
vue.js中npm安装教程图解
Apr 10 #Javascript
vue实现验证码按钮倒计时功能
Apr 10 #Javascript
vue 微信授权登录解决方案
Apr 10 #Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 #Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 #Javascript
Angular CLI在Angular项目中如何使用scss详解
Apr 10 #Javascript
You might like
基于mysql的论坛(1)
2006/10/09 PHP
抓取YAHOO股票报价的类
2009/05/15 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
php实现的双向队列类实例
2014/09/24 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
Form表单按回车自动提交表单的实现方法
2016/11/18 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
python根据出生年份简单计算生肖的方法
2015/03/27 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python引用计数操作示例
2018/08/23 Python
Django stark组件使用及原理详解
2019/08/22 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
python构造IP报文实例
2020/05/05 Python
python中PyQuery库用法分享
2021/01/15 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
历史教育专业个人求职信
2013/12/13 职场文书
小小的船教学反思
2014/02/21 职场文书
施工安全汇报材料
2014/08/17 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
销售开票员岗位职责
2015/04/15 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python