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 相关文章推荐
JavaScript Array扩展实现代码
Oct 14 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
Underscore.js 的模板功能介绍与应用
Dec 24 Javascript
浅析JavaScript中的typeof运算符
Nov 30 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
confirm确认对话框的实现方法总结
Jun 17 Javascript
微信小程序 传值取值的几种方法总结
Jan 16 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
Jul 12 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
JavaScript实现省市区三级联动
Feb 13 Javascript
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多文件上传下载示例分享
2014/02/20 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
用python实现百度翻译的示例代码
2018/03/09 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
园林施工员岗位职责
2013/12/11 职场文书
公务员年度考核评语
2014/12/31 职场文书
大学教师个人总结
2015/02/10 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android