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 Clone Bug解决代码
Dec 22 Javascript
js获取当月最后一天实例代码
Nov 19 Javascript
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
构造函数+原型模式构造js自定义对象(最通用)
May 12 Javascript
JS实现霓虹灯文字效果的方法
Aug 06 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
Feb 14 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
AngularJS实现分页显示数据库信息
Jul 01 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
解决layer.confirm快速点击会重复触发事件的问题
Sep 23 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
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
基于initPHP的框架介绍
2013/04/18 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
vue+mock.js实现前后端分离
2019/07/24 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
python中字符串前面加r的作用
2015/06/04 Python
python利用datetime模块计算时间差
2015/08/04 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
食品安全检查制度
2014/02/03 职场文书
买卖车协议书
2014/04/21 职场文书
工地宣传标语
2014/06/18 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
黄埔军校观后感
2015/06/10 职场文书
预备党员入党感言
2015/08/01 职场文书
春节随笔
2015/08/15 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
四则混合运算教学反思
2016/02/23 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Python天气语音播报小助手
2021/09/25 Python
Python实现双向链表基本操作
2022/05/25 Python