JavaScript 多种滤镜算法

Posted zizizi97

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 多种滤镜算法相关的知识,希望对你有一定的参考价值。

1.灰色滤镜

设定R,G,B值相等

1 function makeGray(img){
2   for(var pixel of img.values()){
3     var avg = (pixel.getRed()+pixel.getGreen()+pixel.getBlue())/3;
4     pixel.setRed(avg);
5     pixel.setGreen(avg);
6     pixel.setBlue(avg);
7   }
8   return img;
9 }

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

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

 1 function makeRed(img){
 2   for(var pixel of img.values()){
 3     var avg = (pixel.getRed()+pixel.getGreen()+pixel.getBlue())/3;
 4     if(avg<128){
 5       pixel.setRed(2*avg);
 6       pixel.setGreen(0);
 7       pixel.setBlue(0);
 8     }
 9     else{
10       pixel.setRed(255);
11       pixel.setGreen(2*avg-255);
12       pixel.setBlue(2*avg-255);
13     }
14   }
15   return img;
16 }

3.彩色滤镜

 1 function makeRainbow(img){
 2   for(var pixel of img.values()){
 3     var x = pixel.getX();
 4     var y = pixel.getY();
 5     var avg = (pixel.getRed()+pixel.getGreen()+pixel.getBlue())/3;
 6     var h = img.height;
 7     if(y<h/7){
 8       if(avg<128){
 9         pixel.setRed(2*avg);
10         pixel.setGreen(0);
11         pixel.setBlue(0);
12       }
13       else{
14         pixel.setRed(255);
15         pixel.setGreen(2*avg-255);
16         pixel.setBlue(2*avg-255);
17       }
18     }
19     if(y>=h/7 && y<h*2/7){
20       if(avg<128){
21         pixel.setRed(2*avg);
22         pixel.setGreen(0.8*avg);
23         pixel.setBlue(0);
24       }
25       else{
26         pixel.setRed(255);
27         pixel.setGreen(1.2*avg-51);
28         pixel.setBlue(2*avg-255);
29       }
30     }
31     if(y>=h*2/7 && y<h*3/7){
32       if(avg<128){
33         pixel.setRed(2*avg);
34         pixel.setGreen(2*avg);
35         pixel.setBlue(0);
36       }
37       else{
38         pixel.setRed(255);
39         pixel.setGreen(255);
40         pixel.setBlue(2*avg-255);
41       }
42     }
43     if(y>=h*3/7 && y<h*4/7){
44       if(avg<128){
45         pixel.setRed(0);
46         pixel.setGreen(2*avg);
47         pixel.setBlue(0);
48       }
49       else{
50         pixel.setRed(2*avg-255);
51         pixel.setGreen(255);
52         pixel.setBlue(2*avg-255);
53       }
54     }
55     if(y>=h*4/7 && y<h*5/7){
56       if(avg<128){
57         pixel.setRed(0);
58         pixel.setGreen(0);
59         pixel.setBlue(2*avg);
60       }
61       else{
62         pixel.setRed(2*avg-255);
63         pixel.setGreen(2*avg-255);
64         pixel.setBlue(255);
65       }
66     }
67     if(y>=5*h/7 && y<h*6/7){
68       if(avg<128){
69         pixel.setRed(0.8*avg);
70         pixel.setGreen(0);
71         pixel.setBlue(2*avg);
72       }
73       else{
74         pixel.setRed(1.2*avg-51);
75         pixel.setGreen(2*avg-255);
76         pixel.setBlue(255);
77       }
78     }
79     if(y>=h*6/7){
80       if(avg<128){
81         pixel.setRed(1.6*avg);
82         pixel.setGreen(0);
83         pixel.setBlue(1.6*avg);
84       }
85       else{
86         pixel.setRed(0.4*avg+153);
87         pixel.setGreen(2*avg-255);
88         pixel.setBlue(0.4*avg+153);
89       }
90     }
91   }
92   return img;
93 }

4.模糊滤镜

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

 

以上是关于JavaScript 多种滤镜算法的主要内容,如果未能解决你的问题,请参考以下文章

基于OpenGL ES的滤镜算法及GLSL实现代码

C语言数字图像处理进阶---10 漏光滤镜

C语言数字图像处理进阶---10 漏光滤镜

设计模式之桥接模式应用例题

计算机视觉系列教程2-6:八大图像特效算法制作你的专属滤镜(附Python代码)

设计模式之桥接模式应用例题