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事件串连执行多个处理过程的方法
Mar 09 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
Apr 25 Javascript
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
JS cookie中文乱码解决方法
Jan 28 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
AngularJS的ng-click传参的方法
Jun 19 Javascript
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
PHP开发框架总结收藏
2008/04/24 PHP
php获取某个目录大小的代码
2008/09/10 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
JavaScript实现区块链
2018/03/14 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
如何运行Python程序的方法
2013/04/21 Python
跟老齐学Python之编写类之二方法
2014/10/11 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python解析最简单的验证码
2016/01/07 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
电钳工人个人求职信
2014/05/10 职场文书
校庆活动策划方案
2014/06/05 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
优秀教师推荐材料
2014/12/16 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
创业计划书之面包店
2019/09/12 职场文书
Python进度条的使用
2021/05/17 Python
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技