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 应用代码 方便的排序功能
Feb 06 Javascript
有效提高JavaScript执行效率的几点知识
Jan 31 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
Nov 25 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
AngularJS ng-repeat数组有重复值的解决方法
Oct 23 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
node事件循环和process模块实例分析
Feb 14 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设计模式 FlyWeight (享元模式)
2011/06/26 PHP
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
Yii2单元测试用法示例
2016/11/12 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
使用JS动态显示文本
2017/09/09 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
python标准库os库的函数介绍
2020/02/12 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
美国在线家具网站:GDFStudio
2021/03/13 全球购物
解除合同协议书
2014/04/17 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
实习报告范文
2019/07/30 职场文书