Bug 20489 Configure illegal file characters https://bugzilla.wikimedia.org/show_bug...
[mediawiki.git] / js2 / mwEmbed / libClipEdit / pixastic-lib / actions / blur.js
blobeb70774ef8cd9716b5ea5b59da029942d920c2be
1 /*
2  * Pixastic Lib - Blur 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.blur = {
8         process : function(params) {
10                 if (typeof params.options.fixMargin == "undefined")
11                         params.options.fixMargin = true;
13                 if (Pixastic.Client.hasCanvasImageData()) {
14                         var data = Pixastic.prepareData(params);
15                         var dataCopy = Pixastic.prepareData(params, true)
17                         /*
18                         var kernel = [
19                                 [0.5,   1,      0.5],
20                                 [1,     2,      1],
21                                 [0.5,   1,      0.5]
22                         ];
23                         */
25                         var kernel = [
26                                 [0,     1,      0],
27                                 [1,     2,      1],
28                                 [0,     1,      0]
29                         ];
31                         var weight = 0;
32                         for (var i=0;i<3;i++) {
33                                 for (var j=0;j<3;j++) {
34                                         weight += kernel[i][j];
35                                 }
36                         }
38                         weight = 1 / (weight*2);
40                         var rect = params.options.rect;
41                         var w = rect.width;
42                         var h = rect.height;
44                         var w4 = w*4;
45                         var y = h;
46                         do {
47                                 var offsetY = (y-1)*w4;
49                                 var prevY = (y == 1) ? 0 : y-2;
50                                 var nextY = (y == h) ? y - 1 : y;
52                                 var offsetYPrev = prevY*w*4;
53                                 var offsetYNext = nextY*w*4;
55                                 var x = w;
56                                 do {
57                                         var offset = offsetY + (x*4-4);
59                                         var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4;
60                                         var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4;
61         
62                                         data[offset] = (
63                                                 /*
64                                                 dataCopy[offsetPrev - 4]
65                                                 + dataCopy[offsetPrev+4] 
66                                                 + dataCopy[offsetNext - 4]
67                                                 + dataCopy[offsetNext+4]
68                                                 + 
69                                                 */
70                                                 (dataCopy[offsetPrev]
71                                                 + dataCopy[offset-4]
72                                                 + dataCopy[offset+4]
73                                                 + dataCopy[offsetNext])         * 2
74                                                 + dataCopy[offset]              * 4
75                                                 ) * weight;
77                                         data[offset+1] = (
78                                                 /*
79                                                 dataCopy[offsetPrev - 3]
80                                                 + dataCopy[offsetPrev+5] 
81                                                 + dataCopy[offsetNext - 3] 
82                                                 + dataCopy[offsetNext+5]
83                                                 + 
84                                                 */
85                                                 (dataCopy[offsetPrev+1]
86                                                 + dataCopy[offset-3]
87                                                 + dataCopy[offset+5]
88                                                 + dataCopy[offsetNext+1])       * 2
89                                                 + dataCopy[offset+1]            * 4
90                                                 ) * weight;
92                                         data[offset+2] = (
93                                                 /*
94                                                 dataCopy[offsetPrev - 2] 
95                                                 + dataCopy[offsetPrev+6] 
96                                                 + dataCopy[offsetNext - 2] 
97                                                 + dataCopy[offsetNext+6]
98                                                 + 
99                                                 */
100                                                 (dataCopy[offsetPrev+2]
101                                                 + dataCopy[offset-2]
102                                                 + dataCopy[offset+6]
103                                                 + dataCopy[offsetNext+2])       * 2
104                                                 + dataCopy[offset+2]            * 4
105                                                 ) * weight;
107                                 } while (--x);
108                         } while (--y);
110                         return true;
112                 } else if (Pixastic.Client.isIE()) {
113                         params.image.style.filter += " progid:DXImageTransform.Microsoft.Blur(pixelradius=1.5)";
115                         if (params.options.fixMargin) {
116                                 params.image.style.marginLeft = (parseInt(params.image.style.marginLeft,10)||0) - 2 + "px";
117                                 params.image.style.marginTop = (parseInt(params.image.style.marginTop,10)||0) - 2 + "px";
118                         }
120                         return true;
121                 }
122         },
123         checkSupport : function() {
124                 return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE());
125         }