JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析


Posted in Javascript onJuly 31, 2018

本文实例讲述了JavaScript+Canvas实现彩色图片转换成黑白图片的方法。分享给大家供大家参考,具体如下:

1、convertToGray()

在主体代码中使用 canvas 元素的id来获取画布,并设置画布的宽和高为图片的宽和高,再将上下文初始化为2d画布;彩色图片加载完成后,使用 drawImage() 将图片加载到上下文,调用用于完成剩余绘制工作的 getColorData()putColorData();最后为myImage指定彩色图片的路径。

2、getColorData()

使用 getImageData()将图像复制到 myImage,然后按照以下方式处理图像:在图像数据数组中移动,并收集前三个字节(红色、绿色和蓝色,忽略 alpha)的值;然后,该图像将三个字节的值相加,并将总和除以3,计算结果将舍入为一个整数,并被写入到这三个字节的值中。此值对应于颜色的色调,但灰度值从0到255,得到外观与原始彩色图片相同的黑白图片。

3、putColorData()

putImageData() 将已更改的图像数据写回到画布,通常用于让另一个图片执行实际处理,并仅在处理完成时显示结果。

var canvas, ctx, myImage;
function convertToGray() {
  myImage = document.getElementById("img");
  canvas = document.getElementById("myCanvas");
  canvas.width = img.width;
  canvas.height = img.height;
  if (canvas.getContext) {
    ctx = canvas.getContext("2d");
    myImage.onload = function() {
      ctx.drawImage(myImage, 0, 0);
      getColorData();
      putColorData();
    }
    myImage.src = "images/img8.jpg";
  }
}
function getColorData() {
  var length = canvas.width * canvas.height;
  myImage = ctx.getImageData(0, 0, canvas.width, canvas.height);
  for (var i = 0; i < length * 4; i += 4) {
    var myRed = myImage.data[i];
    var myGreen = myImage.data[i + 1];
    var myBlue = myImage.data[i + 2];
    myGray = parseInt((myRed + myGreen + myBlue) / 3);
    myImage.data[i] = myGray;
    myImage.data[i + 1] = myGray;
    myImage.data[i + 2] = myGray;
  }
}
function putColorData() {
  ctx.putImageData(myImage, 0, 0);
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
vue多页面开发和打包正确处理方法
Apr 20 Javascript
JavaScript基础之静态方法和实例方法分析
Dec 26 Javascript
vue watch关于对象内的属性监听
Apr 22 Javascript
微信小程序页面传多个参数跳转页面的实现方法
May 17 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
vue-cropper组件实现图片切割上传
May 27 Vue.js
vue实现word,pdf文件的导出功能
Jul 31 #Javascript
在create-react-app中使用css modules的示例代码
Jul 31 #Javascript
详解使用create-react-app添加css modules、sasss和antd
Jul 31 #Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 #jQuery
Vue导出页面为PDF格式的实现思路
Jul 31 #Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 #Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 #Javascript
You might like
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Python装饰器用法实例分析
2019/01/14 Python
Python如何输出警告信息
2020/07/30 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
大学活动策划书范文
2014/01/10 职场文书
教师绩效工资方案
2014/02/01 职场文书
公益活动邀请函
2014/02/05 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
小学毕业感言100字
2015/07/30 职场文书
初中班主任工作随笔
2015/08/15 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle