2 * Pixastic Lib - Emboss 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]
7 Pixastic
.Actions
.emboss
= {
8 process : function(params
) {
10 var strength
= parseFloat(params
.options
.strength
)||1;
11 var greyLevel
= typeof params
.options
.greyLevel
!= "undefined" ? parseInt(params
.options
.greyLevel
) : 180;
12 var direction
= params
.options
.direction
||"topleft";
13 var blend
= !!params
.options
.blend
;
19 case "topleft": // top left
27 case "topright": // top right
31 case "right": // right
35 case "bottomright": // bottom right
39 case "bottom": // bottom
43 case "bottomleft": // bottom left
53 if (Pixastic
.Client
.hasCanvasImageData()) {
54 var data
= Pixastic
.prepareData(params
);
55 var dataCopy
= Pixastic
.prepareData(params
, true)
57 var invertAlpha
= !!params
.options
.invertAlpha
;
58 var rect
= params
.options
.rect
;
65 var offsetY
= (y
-1)*w4
;
68 if (y
+ otherY
< 1) otherY
= 0;
69 if (y
+ otherY
> h
) otherY
= 0;
71 var offsetYOther
= (y
-1+otherY
)*w
*4;
75 var offset
= offsetY
+ (x
-1)*4;
78 if (x
+ otherX
< 1) otherX
= 0;
79 if (x
+ otherX
> w
) otherX
= 0;
81 var offsetOther
= offsetYOther
+ (x
-1+otherX
)*4;
83 var dR
= dataCopy
[offset
] - dataCopy
[offsetOther
];
84 var dG
= dataCopy
[offset
+1] - dataCopy
[offsetOther
+1];
85 var dB
= dataCopy
[offset
+2] - dataCopy
[offsetOther
+2];
88 var absDif
= dif
> 0 ? dif
: -dif
;
90 var absG
= dG
> 0 ? dG
: -dG
;
91 var absB
= dB
> 0 ? dB
: -dB
;
103 var r
= data
[offset
] + dif
;
104 var g
= data
[offset
+1] + dif
;
105 var b
= data
[offset
+2] + dif
;
107 data
[offset
] = (r
> 255) ? 255 : (r
< 0 ? 0 : r
);
108 data
[offset
+1] = (g
> 255) ? 255 : (g
< 0 ? 0 : g
);
109 data
[offset
+2] = (b
> 255) ? 255 : (b
< 0 ? 0 : b
);
111 var grey
= greyLevel
- dif
;
114 } else if (grey
> 255) {
118 data
[offset
] = data
[offset
+1] = data
[offset
+2] = grey
;
125 } else if (Pixastic
.Client
.isIE()) {
126 params
.image
.style
.filter
+= " progid:DXImageTransform.Microsoft.emboss()";
130 checkSupport : function() {
131 return (Pixastic
.Client
.hasCanvasImageData() || Pixastic
.Client
.isIE());