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());