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 相关文章推荐
js document.write()使用介绍
Feb 21 Javascript
jquery动态添加删除(tr/td)
Feb 09 Javascript
深入理解js函数的作用域与this指向
May 28 Javascript
Javascript 实现计算器时间功能详解及实例(二)
Jan 08 Javascript
JS判断一个数是否是水仙花数
Jun 11 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
JS验证输入的是否是数字及保留几位小数问题
May 09 Javascript
p5.js绘制创意自画像
Nov 04 Javascript
Vue实现页面添加水印功能
Nov 09 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
Jan 07 Javascript
vue 项目@change多个参数传值多个事件的操作
Jan 29 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
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
js密码强度校验
2015/11/10 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
毕业证丢失证明
2014/01/15 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
和睦家庭事迹
2014/05/14 职场文书
超市周年庆活动方案
2014/08/16 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
企业宣传稿范文
2015/07/23 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis