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 相关文章推荐
BootStrap下jQuery自动完成的样式调整
May 30 Javascript
Active控件问题小结(附解决办法)
Jun 09 Javascript
浅析JavaScript中命名空间namespace模式
Jun 22 Javascript
Javascript+CSS3实现进度条效果
Oct 28 Javascript
详解jQuery简单的表格应用
Dec 16 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
Mar 29 Javascript
详解node.js 下载图片的 2 种方式
Mar 02 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
js前端如何写一个精确的倒计时代码
Oct 25 Javascript
vue遍历生成的输入框 绑定及修改值示例
Oct 30 Javascript
vue iview实现动态新增和删除
Jun 17 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+dbfile开发小型留言本
2006/10/09 PHP
PHP 上传文件大小限制
2009/07/05 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
2018/11/12 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
python 中文字符串的处理实现代码
2009/10/25 Python
Python内置函数的用法实例教程
2014/09/08 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
python写入中英文字符串到文件的方法
2015/05/06 Python
在Python中使用成员运算符的示例
2015/05/13 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
英国现代绅士品牌:Hackett
2017/12/17 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
什么是类的返射机制
2016/02/06 面试题
食品安全工作实施方案
2014/03/26 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
学生个人评语大全
2015/01/04 职场文书
安全温馨提示语大全
2015/07/14 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
js实现模拟购物商城案例
2021/05/18 Javascript