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 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
Dec 28 Javascript
Jquery中获取iframe的代码
Jan 11 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
JS获取当前脚本文件的绝对路径
Mar 02 Javascript
jQuery实现下拉框功能实例代码
May 06 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
div中文字内容溢出常见的解决方法
Mar 16 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
初探js和简单隐藏效果的实例
Nov 23 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
详解小程序input框失焦事件在提交事件前的处理
May 05 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 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代码质量36计
2012/09/05 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
Bootstrap在线电子商务网站实战项目5
2016/10/14 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
Python 正则表达式入门(初级篇)
2016/12/07 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
人力资源管理专业应届生求职信
2013/09/28 职场文书
企业消防安全制度
2014/02/02 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
六年级小学生评语
2014/12/26 职场文书
个性与发展自我评价
2015/03/06 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
golang生成vcf通讯录格式文件详情
2022/03/25 Golang