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 相关文章推荐
javascript与CSS复习(三)
Jun 29 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
Sep 29 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
Javascript查询DBpedia小应用实例学习
Mar 07 Javascript
javascript定义变量时带var与不带var的区别分析
Jan 12 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
不定义JQuery插件 不要说会JQuery
Mar 07 Javascript
js自定义瀑布流布局插件
May 16 Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
bootstrap-table+treegrid实现树形表格
Jul 26 Javascript
vue  elementUI 表单嵌套验证的实例代码
Nov 06 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
PHP实现简单汉字验证码
2015/07/28 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
python中sys.argv参数用法实例分析
2015/05/20 Python
python实现泊松图像融合
2018/07/26 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
python中time、datetime模块的使用
2020/12/14 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
佳能英国官方网站:Canon UK
2017/08/08 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
员工年终演讲稿
2014/01/03 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
住宅使用说明书
2014/05/09 职场文书
司法所长先进事迹
2014/06/02 职场文书
见习报告的格式
2014/11/04 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS