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 相关文章推荐
基于jQuery的倒计时插件代码
May 07 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
Jun 27 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
Jun 04 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 Javascript
node上的redis调用优化示例详解
Oct 30 Javascript
图解javascript作用域链
May 27 Javascript
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
JS新手入门数组处理的实用方法汇总
Apr 07 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获取随机数组列表的方法
2014/11/13 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
网页常用特效代码整理
2006/06/23 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
Javascript Object.extend
2010/05/18 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
Python常用的爬虫技巧总结
2016/03/28 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
励志演讲稿500字
2014/08/21 职场文书
党性教育心得体会
2014/09/03 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技