JavaScript多种滤镜算法实现代码实例


Posted in Javascript onDecember 10, 2019

这篇文章主要介绍了JavaScript多种滤镜算法实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.灰色滤镜

设定R,G,B值相等

function makeGray(img){
 for(var pixel of img.values()){
  var avg = (pixel.getRed()+pixel.getGreen()+pixel.getBlue())/3;
  pixel.setRed(avg);
  pixel.setGreen(avg);
  pixel.setBlue(avg);
 }
 return img;
}

2.单色滤镜(以红色为例)

计算R,G,B的均值avg,判断avg是否小于128.

function makeRed(img){
 for(var pixel of img.values()){
  var avg = (pixel.getRed()+pixel.getGreen()+pixel.getBlue())/3;
  if(avg<128){
   pixel.setRed(2*avg);
   pixel.setGreen(0);
   pixel.setBlue(0);
  }
  else{
   pixel.setRed(255);
   pixel.setGreen(2*avg-255);
   pixel.setBlue(2*avg-255);
  }
 }
 return img;
}

3.彩色滤镜

function makeRainbow(img){
 for(var pixel of img.values()){
  var x = pixel.getX();
  var y = pixel.getY();
  var avg = (pixel.getRed()+pixel.getGreen()+pixel.getBlue())/3;
  var h = img.height;
  if(y<h/7){
   if(avg<128){
    pixel.setRed(2*avg);
    pixel.setGreen(0);
    pixel.setBlue(0);
   }
   else{
    pixel.setRed(255);
    pixel.setGreen(2*avg-255);
    pixel.setBlue(2*avg-255);
   }
  }
  if(y>=h/7 && y<h*2/7){
   if(avg<128){
    pixel.setRed(2*avg);
    pixel.setGreen(0.8*avg);
    pixel.setBlue(0);
   }
   else{
    pixel.setRed(255);
    pixel.setGreen(1.2*avg-51);
    pixel.setBlue(2*avg-255);
   }
  }
  if(y>=h*2/7 && y<h*3/7){
   if(avg<128){
    pixel.setRed(2*avg);
    pixel.setGreen(2*avg);
    pixel.setBlue(0);
   }
   else{
    pixel.setRed(255);
    pixel.setGreen(255);
    pixel.setBlue(2*avg-255);
   }
  }
  if(y>=h*3/7 && y<h*4/7){
   if(avg<128){
    pixel.setRed(0);
    pixel.setGreen(2*avg);
    pixel.setBlue(0);
   }
   else{
    pixel.setRed(2*avg-255);
    pixel.setGreen(255);
    pixel.setBlue(2*avg-255);
   }
  }
  if(y>=h*4/7 && y<h*5/7){
   if(avg<128){
    pixel.setRed(0);
    pixel.setGreen(0);
    pixel.setBlue(2*avg);
   }
   else{
    pixel.setRed(2*avg-255);
    pixel.setGreen(2*avg-255);
    pixel.setBlue(255);
   }
  }
  if(y>=5*h/7 && y<h*6/7){
   if(avg<128){
    pixel.setRed(0.8*avg);
    pixel.setGreen(0);
    pixel.setBlue(2*avg);
   }
   else{
    pixel.setRed(1.2*avg-51);
    pixel.setGreen(2*avg-255);
    pixel.setBlue(255);
   }
  }
  if(y>=h*6/7){
   if(avg<128){
    pixel.setRed(1.6*avg);
    pixel.setGreen(0);
    pixel.setBlue(1.6*avg);
   }
   else{
    pixel.setRed(0.4*avg+153);
    pixel.setGreen(2*avg-255);
    pixel.setBlue(0.4*avg+153);
   }
  }
 }
 return img;
}

4.模糊滤镜

(1)生成(0,1)之间的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 插件 将this下的div轮番显示
Apr 09 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
Oct 12 Javascript
JS继承用法实例分析
Feb 05 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
Mar 16 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
May 29 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
Vue 2中ref属性的使用方法及注意事项
Jun 12 Javascript
JS使用正则表达式验证身份证号码
Jun 23 Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 Javascript
微信小程序实现页面跳转传值的方法
Oct 12 Javascript
vue-cli3.0 环境变量与模式配置方法
Nov 08 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
Dec 10 #Javascript
vue实现随机验证码功能(完整代码)
Dec 10 #Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 #Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 #Javascript
使用Bootstrap做一个朝代历史表
Dec 10 #Javascript
JS实现拼图游戏
Jan 29 #Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 #Javascript
You might like
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
Python基础知识_浅谈用户交互
2017/05/31 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
企业治理工作自我评价
2013/09/26 职场文书
个人自我评价范文
2014/02/05 职场文书
意向协议书范本
2014/04/23 职场文书
电子工程求职信
2014/07/17 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
先进个人材料怎么写
2014/12/30 职场文书
个人简历求职信范文
2015/03/20 职场文书
行政处罚听证告知书
2015/07/01 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
公司转让协议书
2016/03/19 职场文书