Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / libClipEdit / pixastic-lib / actions / sharpen.js
blobd01383232a52760fdb18942946eb0e22d2cc4908
1 /*
2  * Pixastic Lib - Sharpen filter - v0.1.0
3  * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
4  * MIT License [http://www.opensource.org/licenses/mit-license.php]
5  */
7 Pixastic.Actions.sharpen = {
8         process : function(params) {
10                 var strength = 0;
11                 if (typeof params.options.amount != "undefined")
12                         strength = parseFloat(params.options.amount)||0;
14                 if (strength < 0) strength = 0;
15                 if (strength > 1) strength = 1;
17                 if (Pixastic.Client.hasCanvasImageData()) {
18                         var data = Pixastic.prepareData(params);
19                         var dataCopy = Pixastic.prepareData(params, true)
21                         var mul = 15;
22                         var mulOther = 1 + 3*strength;
24                         var kernel = [
25                                 [0,     -mulOther,      0],
26                                 [-mulOther,     mul,    -mulOther],
27                                 [0,     -mulOther,      0]
28                         ];
30                         var weight = 0;
31                         for (var i=0;i<3;i++) {
32                                 for (var j=0;j<3;j++) {
33                                         weight += kernel[i][j];
34                                 }
35                         }
37                         weight = 1 / weight;
39                         var rect = params.options.rect;
40                         var w = rect.width;
41                         var h = rect.height;
43                         mul *= weight;
44                         mulOther *= weight;
46                         var w4 = w*4;
47                         var y = h;
48                         do {
49                                 var offsetY = (y-1)*w4;
51                                 var nextY = (y == h) ? y - 1 : y;
52                                 var prevY = (y == 1) ? 0 : y-2;
54                                 var offsetYPrev = prevY*w4;
55                                 var offsetYNext = nextY*w4;
57                                 var x = w;
58                                 do {
59                                         var offset = offsetY + (x*4-4);
61                                         var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
62                                         var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
64                                         var r = ((
65                                                 - dataCopy[offsetPrev]
66                                                 - dataCopy[offset-4]
67                                                 - dataCopy[offset+4]
68                                                 - dataCopy[offsetNext])         * mulOther
69                                                 + dataCopy[offset]      * mul
70                                                 );
72                                         var g = ((
73                                                 - dataCopy[offsetPrev+1]
74                                                 - dataCopy[offset-3]
75                                                 - dataCopy[offset+5]
76                                                 - dataCopy[offsetNext+1])       * mulOther
77                                                 + dataCopy[offset+1]    * mul
78                                                 );
80                                         var b = ((
81                                                 - dataCopy[offsetPrev+2]
82                                                 - dataCopy[offset-2]
83                                                 - dataCopy[offset+6]
84                                                 - dataCopy[offsetNext+2])       * mulOther
85                                                 + dataCopy[offset+2]    * mul
86                                                 );
89                                         if (r < 0 ) r = 0;
90                                         if (g < 0 ) g = 0;
91                                         if (b < 0 ) b = 0;
92                                         if (r > 255 ) r = 255;
93                                         if (g > 255 ) g = 255;
94                                         if (b > 255 ) b = 255;
96                                         data[offset] = r;
97                                         data[offset+1] = g;
98                                         data[offset+2] = b;
100                                 } while (--x);
101                         } while (--y);
103                         return true;
105                 }
106         },
107         checkSupport : function() {
108                 return Pixastic.Client.hasCanvasImageData();
109         }