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 相关文章推荐
Tab切换组件(选项卡功能)实例代码
Nov 21 Javascript
js文字横向滚动特效
Nov 11 Javascript
jQuery实现的调整表格行tr上下顺序
Jan 10 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
基于jQuery实现火焰灯效果导航菜单
Jan 04 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
在vue中获取token,并将token写进header的方法
Sep 26 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
JS手写一个自定义Promise操作示例
Mar 16 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中数据的批量导入(csv文件)
2006/10/09 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
php生成HTML文件的类方法
2019/10/11 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python找出最小的K个数实例代码
2018/01/04 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python集合常见运算案例解析
2019/10/17 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python如何输出整数
2020/06/07 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
职工运动会邀请函
2014/02/02 职场文书
员工晚婚的请假条
2014/02/08 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
邀请函样本
2015/02/02 职场文书
杜甫草堂导游词
2015/02/03 职场文书
小学班主任研修日志
2015/11/13 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书