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 相关文章推荐
WEB 浏览器兼容 推荐收藏
May 14 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
jQuery为DOM动态追加事件的方法
Feb 16 Javascript
Vue.js结合bootstrap实现分页控件
Mar 10 Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
React Native使用Modal自定义分享界面的示例代码
Oct 31 Javascript
利用Javascript获取选择文本所在的句子详解
Dec 03 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
vue之将echart封装为组件
Jun 02 Javascript
vue中的面包屑导航组件实例代码
Jul 01 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
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/11/29 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
一步步教你用Python实现2048小游戏
2017/01/19 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
python list元素为tuple时的排序方法
2018/04/18 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
python 实现Harris角点检测算法
2020/12/11 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
教师党性分析材料
2014/02/04 职场文书
公司开业庆典主持词
2014/03/21 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
导游词之日本富士山
2020/01/06 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL