diff --git a/README b/README deleted file mode 100644 index e69de29..0000000 diff --git a/actions/blend.js b/actions/blend.js deleted file mode 100755 index f08232b..0000000 --- a/actions/blend.js +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Pixastic Lib - Blend - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.blend = { - - process : function(params) { - var amount = parseFloat(params.options.amount); - var mode = (params.options.mode || "normal").toLowerCase(); - var image = params.options.image; - - amount = Math.max(0,Math.min(1,amount)); - - if (!image) return false; - - if (Pixastic.Client.hasCanvasImageData()) { - - var rect = params.options.rect; - var data = Pixastic.prepareData(params); - var w = rect.width; - var h = rect.height; - - params.useData = false; - - var otherCanvas = document.createElement("canvas"); - otherCanvas.width = params.canvas.width; - otherCanvas.height = params.canvas.height; - var otherCtx = otherCanvas.getContext("2d"); - otherCtx.drawImage(image,0,0); - - var params2 = {canvas:otherCanvas,options:params.options}; - var data2 = Pixastic.prepareData(params2); - var dataDesc2 = params2.canvasData; - - var p = w*h; - var pix = p*4; - var pix1, pix2; - var r1, g1, b1; - var r2, g2, b2; - var r3, g3, b3; - var r4, g4, b4; - - var dataChanged = false; - - switch (mode) { - case "normal" : - //while (p--) { - // data2[pix-=4] = data2[pix]; - // data2[pix1=pix+1] = data2[pix1]; - // data2[pix2=pix+2] = data2[pix2]; - //} - break; - - case "multiply" : - while (p--) { - data2[pix-=4] = data[pix] * data2[pix] / 255; - data2[pix1=pix+1] = data[pix1] * data2[pix1] / 255; - data2[pix2=pix+2] = data[pix2] * data2[pix2] / 255; - } - dataChanged = true; - break; - - case "lighten" : - while (p--) { - if ((r1 = data[pix-=4]) > data2[pix]) - data2[pix] = r1; - if ((g1 = data[pix1=pix+1]) > data2[pix1]) - data2[pix1] = g1; - if ((b1 = data[pix2=pix+2]) > data2[pix2]) - data2[pix2] = b1; - } - dataChanged = true; - break; - - case "darken" : - while (p--) { - if ((r1 = data[pix-=4]) < data2[pix]) - data2[pix] = r1; - if ((g1 = data[pix1=pix+1]) < data2[pix1]) - data2[pix1] = g1; - if ((b1 = data[pix2=pix+2]) < data2[pix2]) - data2[pix2] = b1; - - } - dataChanged = true; - break; - - case "darkercolor" : - while (p--) { - if (((r1 = data[pix-=4])*0.3+(g1 = data[pix1=pix+1])*0.59+(b1 = data[pix2=pix+2])*0.11) <= (data2[pix]*0.3+data2[pix1]*0.59+data2[pix2]*0.11)) { - data2[pix] = r1; - data2[pix1] = g1; - data2[pix2] = b1; - } - } - dataChanged = true; - break; - - case "lightercolor" : - while (p--) { - if (((r1 = data[pix-=4])*0.3+(g1 = data[pix1=pix+1])*0.59+(b1 = data[pix2=pix+2])*0.11) > (data2[pix]*0.3+data2[pix1]*0.59+data2[pix2]*0.11)) { - data2[pix] = r1; - data2[pix1] = g1; - data2[pix2] = b1; - } - } - dataChanged = true; - break; - - case "lineardodge" : - /* - otherCtx.globalCompositeOperation = "source-over"; - otherCtx.drawImage(params.canvas, 0, 0); - otherCtx.globalCompositeOperation = "lighter"; - otherCtx.drawImage(image, 0, 0); - */ - - while (p--) { - if ((r3 = data[pix-=4] + data2[pix]) > 255) - data2[pix] = 255; - else - data2[pix] = r3; - if ((g3 = data[pix1=pix+1] + data2[pix1]) > 255) - data2[pix1] = 255; - else - data2[pix1] = g3; - if ((b3 = data[pix2=pix+2] + data2[pix2]) > 255) - data2[pix2] = 255; - else - data2[pix2] = b3; - } - dataChanged = true; - - break; - - case "linearburn" : - while (p--) { - if ((r3 = data[pix-=4] + data2[pix]) < 255) - data2[pix] = 0; - else - data2[pix] = (r3 - 255); - if ((g3 = data[pix1=pix+1] + data2[pix1]) < 255) - data2[pix1] = 0; - else - data2[pix1] = (g3 - 255); - if ((b3 = data[pix2=pix+2] + data2[pix2]) < 255) - data2[pix2] = 0; - else - data2[pix2] = (b3 - 255); - } - dataChanged = true; - break; - - case "difference" : - while (p--) { - if ((r3 = data[pix-=4] - data2[pix]) < 0) - data2[pix] = -r3; - else - data2[pix] = r3; - if ((g3 = data[pix1=pix+1] - data2[pix1]) < 0) - data2[pix1] = -g3; - else - data2[pix1] = g3; - if ((b3 = data[pix2=pix+2] - data2[pix2]) < 0) - data2[pix2] = -b3; - else - data2[pix2] = b3; - } - dataChanged = true; - break; - - case "screen" : - while (p--) { - data2[pix-=4] = (255 - ( ((255-data2[pix])*(255-data[pix])) >> 8)); - data2[pix1=pix+1] = (255 - ( ((255-data2[pix1])*(255-data[pix1])) >> 8)); - data2[pix2=pix+2] = (255 - ( ((255-data2[pix2])*(255-data[pix2])) >> 8)); - } - dataChanged = true; - break; - - case "exclusion" : - var div_2_255 = 2 / 255; - while (p--) { - data2[pix-=4] = (r1 = data[pix]) - (r1 * div_2_255 - 1) * data2[pix]; - data2[pix1=pix+1] = (g1 = data[pix1]) - (g1 * div_2_255 - 1) * data2[pix1]; - data2[pix2=pix+2] = (b1 = data[pix2]) - (b1 * div_2_255 - 1) * data2[pix2]; - } - dataChanged = true; - break; - - case "overlay" : - var div_2_255 = 2 / 255; - while (p--) { - if ((r1 = data[pix-=4]) < 128) - data2[pix] = data2[pix]*r1*div_2_255; - else - data2[pix] = 255 - (255-data2[pix])*(255-r1)*div_2_255; - - if ((g1 = data[pix1=pix+1]) < 128) - data2[pix1] = data2[pix1]*g1*div_2_255; - else - data2[pix1] = 255 - (255-data2[pix1])*(255-g1)*div_2_255; - - if ((b1 = data[pix2=pix+2]) < 128) - data2[pix2] = data2[pix2]*b1*div_2_255; - else - data2[pix2] = 255 - (255-data2[pix2])*(255-b1)*div_2_255; - - } - dataChanged = true; - break; - - case "softlight" : - var div_2_255 = 2 / 255; - while (p--) { - if ((r1 = data[pix-=4]) < 128) - data2[pix] = ((data2[pix]>>1) + 64) * r1 * div_2_255; - else - data2[pix] = 255 - (191 - (data2[pix]>>1)) * (255-r1) * div_2_255; - - if ((g1 = data[pix1=pix+1]) < 128) - data2[pix1] = ((data2[pix1]>>1)+64) * g1 * div_2_255; - else - data2[pix1] = 255 - (191 - (data2[pix1]>>1)) * (255-g1) * div_2_255; - - if ((b1 = data[pix2=pix+2]) < 128) - data2[pix2] = ((data2[pix2]>>1)+64) * b1 * div_2_255; - else - data2[pix2] = 255 - (191 - (data2[pix2]>>1)) * (255-b1) * div_2_255; - - } - dataChanged = true; - break; - - case "hardlight" : - var div_2_255 = 2 / 255; - while (p--) { - if ((r2 = data2[pix-=4]) < 128) - data2[pix] = data[pix] * r2 * div_2_255; - else - data2[pix] = 255 - (255-data[pix]) * (255-r2) * div_2_255; - - if ((g2 = data2[pix1=pix+1]) < 128) - data2[pix1] = data[pix1] * g2 * div_2_255; - else - data2[pix1] = 255 - (255-data[pix1]) * (255-g2) * div_2_255; - - if ((b2 = data2[pix2=pix+2]) < 128) - data2[pix2] = data[pix2] * b2 * div_2_255; - else - data2[pix2] = 255 - (255-data[pix2]) * (255-b2) * div_2_255; - - } - dataChanged = true; - break; - - case "colordodge" : - while (p--) { - if ((r3 = (data[pix-=4]<<8)/(255-(r2 = data2[pix]))) > 255 || r2 == 255) - data2[pix] = 255; - else - data2[pix] = r3; - - if ((g3 = (data[pix1=pix+1]<<8)/(255-(g2 = data2[pix1]))) > 255 || g2 == 255) - data2[pix1] = 255; - else - data2[pix1] = g3; - - if ((b3 = (data[pix2=pix+2]<<8)/(255-(b2 = data2[pix2]))) > 255 || b2 == 255) - data2[pix2] = 255; - else - data2[pix2] = b3; - } - dataChanged = true; - break; - - case "colorburn" : - while (p--) { - if ((r3 = 255-((255-data[pix-=4])<<8)/data2[pix]) < 0 || data2[pix] == 0) - data2[pix] = 0; - else - data2[pix] = r3; - - if ((g3 = 255-((255-data[pix1=pix+1])<<8)/data2[pix1]) < 0 || data2[pix1] == 0) - data2[pix1] = 0; - else - data2[pix1] = g3; - - if ((b3 = 255-((255-data[pix2=pix+2])<<8)/data2[pix2]) < 0 || data2[pix2] == 0) - data2[pix2] = 0; - else - data2[pix2] = b3; - } - dataChanged = true; - break; - - case "linearlight" : - while (p--) { - if ( ((r3 = 2*(r2=data2[pix-=4])+data[pix]-256) < 0) || (r2 < 128 && r3 < 0)) { - data2[pix] = 0 - } else { - if (r3 > 255) - data2[pix] = 255; - else - data2[pix] = r3; - } - if ( ((g3 = 2*(g2=data2[pix1=pix+1])+data[pix1]-256) < 0) || (g2 < 128 && g3 < 0)) { - data2[pix1] = 0 - } else { - if (g3 > 255) - data2[pix1] = 255; - else - data2[pix1] = g3; - } - if ( ((b3 = 2*(b2=data2[pix2=pix+2])+data[pix2]-256) < 0) || (b2 < 128 && b3 < 0)) { - data2[pix2] = 0 - } else { - if (b3 > 255) - data2[pix2] = 255; - else - data2[pix2] = b3; - } - } - dataChanged = true; - break; - - case "vividlight" : - while (p--) { - if ((r2=data2[pix-=4]) < 128) { - if (r2) { - if ((r3 = 255 - ((255-data[pix])<<8) / (2*r2)) < 0) - data2[pix] = 0; - else - data2[pix] = r3 - } else { - data2[pix] = 0; - } - } else if ((r3 = (r4=2*r2-256)) < 255) { - if ((r3 = (data[pix]<<8)/(255-r4)) > 255) - data2[pix] = 255; - else - data2[pix] = r3; - } else { - if (r3 < 0) - data2[pix] = 0; - else - data2[pix] = r3 - } - - if ((g2=data2[pix1=pix+1]) < 128) { - if (g2) { - if ((g3 = 255 - ((255-data[pix1])<<8) / (2*g2)) < 0) - data2[pix1] = 0; - else - data2[pix1] = g3; - } else { - data2[pix1] = 0; - } - } else if ((g3 = (g4=2*g2-256)) < 255) { - if ((g3 = (data[pix1]<<8)/(255-g4)) > 255) - data2[pix1] = 255; - else - data2[pix1] = g3; - } else { - if (g3 < 0) - data2[pix1] = 0; - else - data2[pix1] = g3; - } - - if ((b2=data2[pix2=pix+2]) < 128) { - if (b2) { - if ((b3 = 255 - ((255-data[pix2])<<8) / (2*b2)) < 0) - data2[pix2] = 0; - else - data2[pix2] = b3; - } else { - data2[pix2] = 0; - } - } else if ((b3 = (b4=2*b2-256)) < 255) { - if ((b3 = (data[pix2]<<8)/(255-b4)) > 255) - data2[pix2] = 255; - else - data2[pix2] = b3; - } else { - if (b3 < 0) - data2[pix2] = 0; - else - data2[pix2] = b3; - } - } - dataChanged = true; - break; - - case "pinlight" : - while (p--) { - if ((r2=data2[pix-=4]) < 128) - if ((r1=data[pix]) < (r4=2*r2)) - data2[pix] = r1; - else - data2[pix] = r4; - else - if ((r1=data[pix]) > (r4=2*r2-256)) - data2[pix] = r1; - else - data2[pix] = r4; - - if ((g2=data2[pix1=pix+1]) < 128) - if ((g1=data[pix1]) < (g4=2*g2)) - data2[pix1] = g1; - else - data2[pix1] = g4; - else - if ((g1=data[pix1]) > (g4=2*g2-256)) - data2[pix1] = g1; - else - data2[pix1] = g4; - - if ((r2=data2[pix2=pix+2]) < 128) - if ((r1=data[pix2]) < (r4=2*r2)) - data2[pix2] = r1; - else - data2[pix2] = r4; - else - if ((r1=data[pix2]) > (r4=2*r2-256)) - data2[pix2] = r1; - else - data2[pix2] = r4; - } - dataChanged = true; - break; - - case "hardmix" : - while (p--) { - if ((r2 = data2[pix-=4]) < 128) - if (255 - ((255-data[pix])<<8)/(2*r2) < 128 || r2 == 0) - data2[pix] = 0; - else - data2[pix] = 255; - else if ((r4=2*r2-256) < 255 && (data[pix]<<8)/(255-r4) < 128) - data2[pix] = 0; - else - data2[pix] = 255; - - if ((g2 = data2[pix1=pix+1]) < 128) - if (255 - ((255-data[pix1])<<8)/(2*g2) < 128 || g2 == 0) - data2[pix1] = 0; - else - data2[pix1] = 255; - else if ((g4=2*g2-256) < 255 && (data[pix1]<<8)/(255-g4) < 128) - data2[pix1] = 0; - else - data2[pix1] = 255; - - if ((b2 = data2[pix2=pix+2]) < 128) - if (255 - ((255-data[pix2])<<8)/(2*b2) < 128 || b2 == 0) - data2[pix2] = 0; - else - data2[pix2] = 255; - else if ((b4=2*b2-256) < 255 && (data[pix2]<<8)/(255-b4) < 128) - data2[pix2] = 0; - else - data2[pix2] = 255; - } - dataChanged = true; - break; - } - - if (dataChanged) - otherCtx.putImageData(dataDesc2,0,0); - - if (amount != 1 && !Pixastic.Client.hasGlobalAlpha()) { - var p = w*h; - var amount2 = amount; - var amount1 = 1 - amount; - while (p--) { - var pix = p*4; - var r = (data[pix] * amount1 + data2[pix] * amount2)>>0; - var g = (data[pix+1] * amount1 + data2[pix+1] * amount2)>>0; - var b = (data[pix+2] * amount1 + data2[pix+2] * amount2)>>0; - - data[pix] = r; - data[pix+1] = g; - data[pix+2] = b; - } - params.useData = true; - } else { - var ctx = params.canvas.getContext("2d"); - ctx.save(); - ctx.globalAlpha = amount; - ctx.drawImage( - otherCanvas, - 0,0,rect.width,rect.height, - rect.left,rect.top,rect.width,rect.height - ); - ctx.globalAlpha = 1; - ctx.restore(); - } - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} \ No newline at end of file diff --git a/actions/blur.js b/actions/blur.js deleted file mode 100755 index f53192c..0000000 --- a/actions/blur.js +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Pixastic Lib - Blur filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.blur = { - process : function(params) { - - if (typeof params.options.fixMargin == "undefined") - params.options.fixMargin = true; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var dataCopy = Pixastic.prepareData(params, true) - - /* - var kernel = [ - [0.5, 1, 0.5], - [1, 2, 1], - [0.5, 1, 0.5] - ]; - */ - - var kernel = [ - [0, 1, 0], - [1, 2, 1], - [0, 1, 0] - ]; - - var weight = 0; - for (var i=0;i<3;i++) { - for (var j=0;j<3;j++) { - weight += kernel[i][j]; - } - } - - weight = 1 / (weight*2); - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - - var prevY = (y == 1) ? 0 : y-2; - var nextY = (y == h) ? y - 1 : y; - - var offsetYPrev = prevY*w*4; - var offsetYNext = nextY*w*4; - - var x = w; - do { - var offset = offsetY + (x*4-4); - - var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4; - var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4; - - data[offset] = ( - /* - dataCopy[offsetPrev - 4] - + dataCopy[offsetPrev+4] - + dataCopy[offsetNext - 4] - + dataCopy[offsetNext+4] - + - */ - (dataCopy[offsetPrev] - + dataCopy[offset-4] - + dataCopy[offset+4] - + dataCopy[offsetNext]) * 2 - + dataCopy[offset] * 4 - ) * weight; - - data[offset+1] = ( - /* - dataCopy[offsetPrev - 3] - + dataCopy[offsetPrev+5] - + dataCopy[offsetNext - 3] - + dataCopy[offsetNext+5] - + - */ - (dataCopy[offsetPrev+1] - + dataCopy[offset-3] - + dataCopy[offset+5] - + dataCopy[offsetNext+1]) * 2 - + dataCopy[offset+1] * 4 - ) * weight; - - data[offset+2] = ( - /* - dataCopy[offsetPrev - 2] - + dataCopy[offsetPrev+6] - + dataCopy[offsetNext - 2] - + dataCopy[offsetNext+6] - + - */ - (dataCopy[offsetPrev+2] - + dataCopy[offset-2] - + dataCopy[offset+6] - + dataCopy[offsetNext+2]) * 2 - + dataCopy[offset+2] * 4 - ) * weight; - - } while (--x); - } while (--y); - - return true; - - } else if (Pixastic.Client.isIE()) { - params.image.style.filter += " progid:DXImageTransform.Microsoft.Blur(pixelradius=1.5)"; - - if (params.options.fixMargin) { - params.image.style.marginLeft = (parseInt(params.image.style.marginLeft,10)||0) - 2 + "px"; - params.image.style.marginTop = (parseInt(params.image.style.marginTop,10)||0) - 2 + "px"; - } - - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE()); - } -} \ No newline at end of file diff --git a/actions/blurfast.js b/actions/blurfast.js deleted file mode 100755 index 0fbcf7d..0000000 --- a/actions/blurfast.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Pixastic Lib - Blur Fast - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.blurfast = { - process : function(params) { - - var amount = parseFloat(params.options.amount)||0; - var clear = !!(params.options.clear && params.options.clear != "false"); - - amount = Math.max(0,Math.min(5,amount)); - - if (Pixastic.Client.hasCanvas()) { - var rect = params.options.rect; - - var ctx = params.canvas.getContext("2d"); - ctx.save(); - ctx.beginPath(); - ctx.rect(rect.left, rect.top, rect.width, rect.height); - ctx.clip(); - - var scale = 2; - var smallWidth = Math.round(params.width / scale); - var smallHeight = Math.round(params.height / scale); - - var copy = document.createElement("canvas"); - copy.width = smallWidth; - copy.height = smallHeight; - - var clear = false; - var steps = Math.round(amount * 20); - - var copyCtx = copy.getContext("2d"); - for (var i=0;i 255 ) - data[pix] = 255; - else if (r < 0) - data[pix] = 0; - else - data[pix] = r; - - if ((g = data[pix1=pix+1] * mul + add) > 255 ) - data[pix1] = 255; - else if (g < 0) - data[pix1] = 0; - else - data[pix1] = g; - - if ((b = data[pix2=pix+2] * mul + add) > 255 ) - data[pix2] = 255; - else if (b < 0) - data[pix2] = 0; - else - data[pix2] = b; - } - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} - diff --git a/actions/coloradjust.js b/actions/coloradjust.js deleted file mode 100755 index 30fb56b..0000000 --- a/actions/coloradjust.js +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Pixastic Lib - Color adjust filter - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.coloradjust = { - - process : function(params) { - var red = parseFloat(params.options.red) || 0; - var green = parseFloat(params.options.green) || 0; - var blue = parseFloat(params.options.blue) || 0; - - red = Math.round(red*255); - green = Math.round(green*255); - blue = Math.round(blue*255); - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var rect = params.options.rect; - - var p = rect.width*rect.height; - var pix = p*4, pix1, pix2; - - var r, g, b; - while (p--) { - pix -= 4; - - if (red) { - if ((r = data[pix] + red) < 0 ) - data[pix] = 0; - else if (r > 255 ) - data[pix] = 255; - else - data[pix] = r; - } - - if (green) { - if ((g = data[pix1=pix+1] + green) < 0 ) - data[pix1] = 0; - else if (g > 255 ) - data[pix1] = 255; - else - data[pix1] = g; - } - - if (blue) { - if ((b = data[pix2=pix+2] + blue) < 0 ) - data[pix2] = 0; - else if (b > 255 ) - data[pix2] = 255; - else - data[pix2] = b; - } - } - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData()); - } -} diff --git a/actions/colorhistogram.js b/actions/colorhistogram.js deleted file mode 100755 index 03402f8..0000000 --- a/actions/colorhistogram.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Pixastic Lib - Histogram - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - - -Pixastic.Actions.colorhistogram = { - - array256 : function(default_value) { - arr = []; - for (var i=0; i<256; i++) { arr[i] = default_value; } - return arr - }, - - process : function(params) { - var values = []; - if (typeof params.options.returnValue != "object") { - params.options.returnValue = {rvals:[], gvals:[], bvals:[]}; - } - var paint = !!(params.options.paint); - - var returnValue = params.options.returnValue; - if (typeof returnValue.values != "array") { - returnValue.rvals = []; - returnValue.gvals = []; - returnValue.bvals = []; - } - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - params.useData = false; - - var rvals = this.array256(0); - var gvals = this.array256(0); - var bvals = this.array256(0); - - var rect = params.options.rect; - - var p = rect.width*rect.height; - var pix = p*4; - while (p--) { - rvals[data[pix-=4]]++; - gvals[data[pix+1]]++; - bvals[data[pix+2]]++; - } - - returnValue.rvals = rvals; - returnValue.gvals = gvals; - returnValue.bvals = bvals; - - if (paint) { - var ctx = params.canvas.getContext("2d"); - var vals = [rvals, gvals, bvals]; - for (var v=0;v<3;v++) { - var yoff = (v+1) * params.height / 3; - var maxValue = 0; - for (var i=0;i<256;i++) { - if (vals[v][i] > maxValue) - maxValue = vals[v][i]; - } - var heightScale = params.height / 3 / maxValue; - var widthScale = params.width / 256; - if (v==0) ctx.fillStyle = "rgba(255,0,0,0.5)"; - else if (v==1) ctx.fillStyle = "rgba(0,255,0,0.5)"; - else if (v==2) ctx.fillStyle = "rgba(0,0,255,0.5)"; - for (var i=0;i<256;i++) { - ctx.fillRect( - i * widthScale, params.height - heightScale * vals[v][i] - params.height + yoff, - widthScale, vals[v][i] * heightScale - ); - } - } - } - return true; - } - }, - - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} \ No newline at end of file diff --git a/actions/crop.js b/actions/crop.js deleted file mode 100755 index bd1b522..0000000 --- a/actions/crop.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Pixastic Lib - Crop - v0.1.1 - * Copyright (c) 2008-2009 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.crop = { - process : function(params) { - if (Pixastic.Client.hasCanvas()) { - var rect = params.options.rect; - - var width = rect.width; - var height = rect.height; - var top = rect.top; - var left = rect.left; - - if (typeof params.options.left != "undefined") - left = parseInt(params.options.left,10); - if (typeof params.options.top != "undefined") - top = parseInt(params.options.top,10); - if (typeof params.options.height != "undefined") - width = parseInt(params.options.width,10); - if (typeof params.options.height != "undefined") - height = parseInt(params.options.height,10); - - if (left < 0) left = 0; - if (left > params.width-1) left = params.width-1; - - if (top < 0) top = 0; - if (top > params.height-1) top = params.height-1; - - if (width < 1) width = 1; - if (left + width > params.width) - width = params.width - left; - - if (height < 1) height = 1; - if (top + height > params.height) - height = params.height - top; - - var copy = document.createElement("canvas"); - copy.width = params.width; - copy.height = params.height; - copy.getContext("2d").drawImage(params.canvas,0,0); - - params.canvas.width = width; - params.canvas.height = height; - params.canvas.getContext("2d").clearRect(0,0,width,height); - - params.canvas.getContext("2d").drawImage(copy, - left,top,width,height, - 0,0,width,height - ); - - params.useData = false; - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvas(); - } -} - - diff --git a/actions/desaturate.js b/actions/desaturate.js deleted file mode 100755 index 0c346c1..0000000 --- a/actions/desaturate.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Pixastic Lib - Desaturation filter - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.desaturate = { - - process : function(params) { - var useAverage = !!(params.options.average && params.options.average != "false"); - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var p = w*h; - var pix = p*4, pix1, pix2; - - if (useAverage) { - while (p--) - data[pix-=4] = data[pix1=pix+1] = data[pix2=pix+2] = (data[pix]+data[pix1]+data[pix2])/3 - } else { - while (p--) - data[pix-=4] = data[pix1=pix+1] = data[pix2=pix+2] = (data[pix]*0.3 + data[pix1]*0.59 + data[pix2]*0.11); - } - return true; - } else if (Pixastic.Client.isIE()) { - params.image.style.filter += " gray"; - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE()); - } -} \ No newline at end of file diff --git a/actions/edges.js b/actions/edges.js deleted file mode 100755 index a3002aa..0000000 --- a/actions/edges.js +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Pixastic Lib - Edge detection filter - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.edges = { - process : function(params) { - - var mono = !!(params.options.mono && params.options.mono != "false"); - var invert = !!(params.options.invert && params.options.invert != "false"); - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var dataCopy = Pixastic.prepareData(params, true) - - var c = -1/8; - var kernel = [ - [c, c, c], - [c, 1, c], - [c, c, c] - ]; - - weight = 1/c; - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - - var nextY = (y == h) ? y - 1 : y; - var prevY = (y == 1) ? 0 : y-2; - - var offsetYPrev = prevY*w*4; - var offsetYNext = nextY*w*4; - - var x = w; - do { - var offset = offsetY + (x*4-4); - - var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4; - var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4; - - var r = ((dataCopy[offsetPrev-4] - + dataCopy[offsetPrev] - + dataCopy[offsetPrev+4] - + dataCopy[offset-4] - + dataCopy[offset+4] - + dataCopy[offsetNext-4] - + dataCopy[offsetNext] - + dataCopy[offsetNext+4]) * c - + dataCopy[offset] - ) - * weight; - - var g = ((dataCopy[offsetPrev-3] - + dataCopy[offsetPrev+1] - + dataCopy[offsetPrev+5] - + dataCopy[offset-3] - + dataCopy[offset+5] - + dataCopy[offsetNext-3] - + dataCopy[offsetNext+1] - + dataCopy[offsetNext+5]) * c - + dataCopy[offset+1]) - * weight; - - var b = ((dataCopy[offsetPrev-2] - + dataCopy[offsetPrev+2] - + dataCopy[offsetPrev+6] - + dataCopy[offset-2] - + dataCopy[offset+6] - + dataCopy[offsetNext-2] - + dataCopy[offsetNext+2] - + dataCopy[offsetNext+6]) * c - + dataCopy[offset+2]) - * weight; - - if (mono) { - var brightness = (r*0.3 + g*0.59 + b*0.11)||0; - if (invert) brightness = 255 - brightness; - if (brightness < 0 ) brightness = 0; - if (brightness > 255 ) brightness = 255; - r = g = b = brightness; - } else { - if (invert) { - r = 255 - r; - g = 255 - g; - b = 255 - b; - } - if (r < 0 ) r = 0; - if (g < 0 ) g = 0; - if (b < 0 ) b = 0; - if (r > 255 ) r = 255; - if (g > 255 ) g = 255; - if (b > 255 ) b = 255; - } - - data[offset] = r; - data[offset+1] = g; - data[offset+2] = b; - - } while (--x); - } while (--y); - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} \ No newline at end of file diff --git a/actions/edges2.js b/actions/edges2.js deleted file mode 100755 index 13a3b39..0000000 --- a/actions/edges2.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Pixastic Lib - Edge detection 2 - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - * - * Contribution by Oliver Hunt (http://nerget.com/, http://nerget.com/canvas/edgeDetection.js). Thanks Oliver! - * - */ - -Pixastic.Actions.edges2 = { - process : function(params) { - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var dataCopy = Pixastic.prepareData(params, true) - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var w4 = w * 4; - var pixel = w4 + 4; // Start at (1,1) - var hm1 = h - 1; - var wm1 = w - 1; - for (var y = 1; y < hm1; ++y) { - // Prepare initial cached values for current row - var centerRow = pixel - 4; - var priorRow = centerRow - w4; - var nextRow = centerRow + w4; - - var r1 = - dataCopy[priorRow] - dataCopy[centerRow] - dataCopy[nextRow]; - var g1 = - dataCopy[++priorRow] - dataCopy[++centerRow] - dataCopy[++nextRow]; - var b1 = - dataCopy[++priorRow] - dataCopy[++centerRow] - dataCopy[++nextRow]; - - var rp = dataCopy[priorRow += 2]; - var gp = dataCopy[++priorRow]; - var bp = dataCopy[++priorRow]; - - var rc = dataCopy[centerRow += 2]; - var gc = dataCopy[++centerRow]; - var bc = dataCopy[++centerRow]; - - var rn = dataCopy[nextRow += 2]; - var gn = dataCopy[++nextRow]; - var bn = dataCopy[++nextRow]; - - var r2 = - rp - rc - rn; - var g2 = - gp - gc - gn; - var b2 = - bp - bc - bn; - - // Main convolution loop - for (var x = 1; x < wm1; ++x) { - centerRow = pixel + 4; - priorRow = centerRow - w4; - nextRow = centerRow + w4; - - var r = 127 + r1 - rp - (rc * -8) - rn; - var g = 127 + g1 - gp - (gc * -8) - gn; - var b = 127 + b1 - bp - (bc * -8) - bn; - - r1 = r2; - g1 = g2; - b1 = b2; - - rp = dataCopy[ priorRow]; - gp = dataCopy[++priorRow]; - bp = dataCopy[++priorRow]; - - rc = dataCopy[ centerRow]; - gc = dataCopy[++centerRow]; - bc = dataCopy[++centerRow]; - - rn = dataCopy[ nextRow]; - gn = dataCopy[++nextRow]; - bn = dataCopy[++nextRow]; - - r += (r2 = - rp - rc - rn); - g += (g2 = - gp - gc - gn); - b += (b2 = - bp - bc - bn); - - if (r > 255) r = 255; - if (g > 255) g = 255; - if (b > 255) b = 255; - if (r < 0) r = 0; - if (g < 0) g = 0; - if (b < 0) b = 0; - - data[pixel] = r; - data[++pixel] = g; - data[++pixel] = b; - //data[++pixel] = 255; // alpha - - pixel+=2; - } - pixel += 8; - } - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} \ No newline at end of file diff --git a/actions/emboss.js b/actions/emboss.js deleted file mode 100755 index 0b8b065..0000000 --- a/actions/emboss.js +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Pixastic Lib - Emboss filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.emboss = { - process : function(params) { - - var strength = parseFloat(params.options.strength)||1; - var greyLevel = typeof params.options.greyLevel != "undefined" ? parseInt(params.options.greyLevel) : 180; - var direction = params.options.direction||"topleft"; - var blend = !!(params.options.blend && params.options.blend != "false"); - - var dirY = 0; - var dirX = 0; - - switch (direction) { - case "topleft": // top left - dirY = -1; - dirX = -1; - break; - case "top": // top - dirY = -1; - dirX = 0; - break; - case "topright": // top right - dirY = -1; - dirX = 1; - break; - case "right": // right - dirY = 0; - dirX = 1; - break; - case "bottomright": // bottom right - dirY = 1; - dirX = 1; - break; - case "bottom": // bottom - dirY = 1; - dirX = 0; - break; - case "bottomleft": // bottom left - dirY = 1; - dirX = -1; - break; - case "left": // left - dirY = 0; - dirX = -1; - break; - } - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var dataCopy = Pixastic.prepareData(params, true) - - var invertAlpha = !!params.options.invertAlpha; - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - - var otherY = dirY; - if (y + otherY < 1) otherY = 0; - if (y + otherY > h) otherY = 0; - - var offsetYOther = (y-1+otherY)*w*4; - - var x = w; - do { - var offset = offsetY + (x-1)*4; - - var otherX = dirX; - if (x + otherX < 1) otherX = 0; - if (x + otherX > w) otherX = 0; - - var offsetOther = offsetYOther + (x-1+otherX)*4; - - var dR = dataCopy[offset] - dataCopy[offsetOther]; - var dG = dataCopy[offset+1] - dataCopy[offsetOther+1]; - var dB = dataCopy[offset+2] - dataCopy[offsetOther+2]; - - var dif = dR; - var absDif = dif > 0 ? dif : -dif; - - var absG = dG > 0 ? dG : -dG; - var absB = dB > 0 ? dB : -dB; - - if (absG > absDif) { - dif = dG; - } - if (absB > absDif) { - dif = dB; - } - - dif *= strength; - - if (blend) { - var r = data[offset] + dif; - var g = data[offset+1] + dif; - var b = data[offset+2] + dif; - - data[offset] = (r > 255) ? 255 : (r < 0 ? 0 : r); - data[offset+1] = (g > 255) ? 255 : (g < 0 ? 0 : g); - data[offset+2] = (b > 255) ? 255 : (b < 0 ? 0 : b); - } else { - var grey = greyLevel - dif; - if (grey < 0) { - grey = 0; - } else if (grey > 255) { - grey = 255; - } - - data[offset] = data[offset+1] = data[offset+2] = grey; - } - - } while (--x); - } while (--y); - return true; - - } else if (Pixastic.Client.isIE()) { - params.image.style.filter += " progid:DXImageTransform.Microsoft.emboss()"; - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE()); - } - -} diff --git a/actions/flip.js b/actions/flip.js deleted file mode 100755 index 01e45ea..0000000 --- a/actions/flip.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Pixastic Lib - Flip - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.flip = { - process : function(params) { - var rect = params.options.rect; - var copyCanvas = document.createElement("canvas"); - copyCanvas.width = rect.width; - copyCanvas.height = rect.height; - copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height); - - var ctx = params.canvas.getContext("2d"); - ctx.clearRect(rect.left, rect.top, rect.width, rect.height); - - if (params.options.axis == "horizontal") { - ctx.scale(-1,1); - ctx.drawImage(copyCanvas, -rect.left-rect.width, rect.top, rect.width, rect.height) - } else { - ctx.scale(1,-1); - ctx.drawImage(copyCanvas, rect.left, -rect.top-rect.height, rect.width, rect.height) - } - - params.useData = false; - - return true; - }, - checkSupport : function() { - return Pixastic.Client.hasCanvas(); - } -} - diff --git a/actions/fliph.js b/actions/fliph.js deleted file mode 100755 index 2d01841..0000000 --- a/actions/fliph.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Pixastic Lib - Horizontal flip - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.fliph = { - process : function(params) { - if (Pixastic.Client.hasCanvas()) { - var rect = params.options.rect; - var copyCanvas = document.createElement("canvas"); - copyCanvas.width = rect.width; - copyCanvas.height = rect.height; - copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height); - - var ctx = params.canvas.getContext("2d"); - ctx.clearRect(rect.left, rect.top, rect.width, rect.height); - ctx.scale(-1,1); - ctx.drawImage(copyCanvas, -rect.left-rect.width, rect.top, rect.width, rect.height) - params.useData = false; - - return true; - - } else if (Pixastic.Client.isIE()) { - params.image.style.filter += " fliph"; - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvas() || Pixastic.Client.isIE()); - } -} - diff --git a/actions/flipv.js b/actions/flipv.js deleted file mode 100755 index 66f5d5f..0000000 --- a/actions/flipv.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Pixastic Lib - Vertical flip - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.flipv = { - process : function(params) { - if (Pixastic.Client.hasCanvas()) { - var rect = params.options.rect; - var copyCanvas = document.createElement("canvas"); - copyCanvas.width = rect.width; - copyCanvas.height = rect.height; - copyCanvas.getContext("2d").drawImage(params.image, rect.left, rect.top, rect.width, rect.height, 0, 0, rect.width, rect.height); - - var ctx = params.canvas.getContext("2d"); - ctx.clearRect(rect.left, rect.top, rect.width, rect.height); - ctx.scale(1,-1); - ctx.drawImage(copyCanvas, rect.left, -rect.top-rect.height, rect.width, rect.height) - params.useData = false; - - return true; - - } else if (Pixastic.Client.isIE()) { - params.image.style.filter += " flipv"; - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvas() || Pixastic.Client.isIE()); - } -} - diff --git a/actions/glow.js b/actions/glow.js deleted file mode 100755 index 6f7dbbc..0000000 --- a/actions/glow.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Pixastic Lib - Glow - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - - -Pixastic.Actions.glow = { - process : function(params) { - - var amount = (parseFloat(params.options.amount)||0); - var blurAmount = parseFloat(params.options.radius)||0; - - amount = Math.min(1,Math.max(0,amount)); - blurAmount = Math.min(5,Math.max(0,blurAmount)); - - if (Pixastic.Client.hasCanvasImageData()) { - var rect = params.options.rect; - - var blurCanvas = document.createElement("canvas"); - blurCanvas.width = params.width; - blurCanvas.height = params.height; - var blurCtx = blurCanvas.getContext("2d"); - blurCtx.drawImage(params.canvas,0,0); - - var scale = 2; - var smallWidth = Math.round(params.width / scale); - var smallHeight = Math.round(params.height / scale); - - var copy = document.createElement("canvas"); - copy.width = smallWidth; - copy.height = smallHeight; - - var clear = true; - var steps = Math.round(blurAmount * 20); - - var copyCtx = copy.getContext("2d"); - for (var i=0;i 255) data[pix] = 255; - if ((data[pix1-=4] += amount * blurData[pix1]) > 255) data[pix1] = 255; - if ((data[pix2-=4] += amount * blurData[pix2]) > 255) data[pix2] = 255; - } - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} - - - diff --git a/actions/histogram.js b/actions/histogram.js deleted file mode 100755 index c48ef01..0000000 --- a/actions/histogram.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Pixastic Lib - Histogram - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.histogram = { - process : function(params) { - - var average = !!(params.options.average && params.options.average != "false"); - var paint = !!(params.options.paint && params.options.paint != "false"); - var color = params.options.color || "rgba(255,255,255,0.5)"; - var values = []; - if (typeof params.options.returnValue != "object") { - params.options.returnValue = {values:[]}; - } - var returnValue = params.options.returnValue; - if (typeof returnValue.values != "array") { - returnValue.values = []; - } - values = returnValue.values; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - params.useData = false; - - for (var i=0;i<256;i++) { - values[i] = 0; - } - - var rect = params.options.rect; - var p = rect.width * rect.height; - - var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3; - var round = Math.round; - - if (average) { - while (p--) { - values[ round((data[pix-=4]+data[pix+1]+data[pix+2])/3) ]++; - } - } else { - while (p--) { - values[ round(data[pix-=4]*0.3 + data[pix+1]*0.59 + data[pix+2]*0.11) ]++; - } - } - - if (paint) { - var maxValue = 0; - for (var i=0;i<256;i++) { - if (values[i] > maxValue) { - maxValue = values[i]; - } - } - var heightScale = params.height / maxValue; - var widthScale = params.width / 256; - var ctx = params.canvas.getContext("2d"); - ctx.fillStyle = color; - for (var i=0;i<256;i++) { - ctx.fillRect( - i * widthScale, params.height - heightScale * values[i], - widthScale, values[i] * heightScale - ); - } - } - - returnValue.values = values; - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} diff --git a/actions/hsl.js b/actions/hsl.js deleted file mode 100755 index d0b7d50..0000000 --- a/actions/hsl.js +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Pixastic Lib - HSL Adjust - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.hsl = { - process : function(params) { - - var hue = parseInt(params.options.hue,10)||0; - var saturation = (parseInt(params.options.saturation,10)||0) / 100; - var lightness = (parseInt(params.options.lightness,10)||0) / 100; - - - // this seems to give the same result as Photoshop - if (saturation < 0) { - var satMul = 1+saturation; - } else { - var satMul = 1+saturation*2; - } - - hue = (hue%360) / 360; - var hue6 = hue * 6; - - var rgbDiv = 1 / 255; - - var light255 = lightness * 255; - var lightp1 = 1 + lightness; - var lightm1 = 1 - lightness; - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - - var rect = params.options.rect; - - var p = rect.width * rect.height; - - var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3; - - while (p--) { - - var r = data[pix-=4]; - var g = data[pix1=pix+1]; - var b = data[pix2=pix+2]; - - if (hue != 0 || saturation != 0) { - // ok, here comes rgb to hsl + adjust + hsl to rgb, all in one jumbled mess. - // It's not so pretty, but it's been optimized to get somewhat decent performance. - // The transforms were originally adapted from the ones found in Graphics Gems, but have been heavily modified. - var vs = r; - if (g > vs) vs = g; - if (b > vs) vs = b; - var ms = r; - if (g < ms) ms = g; - if (b < ms) ms = b; - var vm = (vs-ms); - var l = (ms+vs)/510; - if (l > 0) { - if (vm > 0) { - if (l <= 0.5) { - var s = vm / (vs+ms) * satMul; - if (s > 1) s = 1; - var v = (l * (1+s)); - } else { - var s = vm / (510-vs-ms) * satMul; - if (s > 1) s = 1; - var v = (l+s - l*s); - } - if (r == vs) { - if (g == ms) - var h = 5 + ((vs-b)/vm) + hue6; - else - var h = 1 - ((vs-g)/vm) + hue6; - } else if (g == vs) { - if (b == ms) - var h = 1 + ((vs-r)/vm) + hue6; - else - var h = 3 - ((vs-b)/vm) + hue6; - } else { - if (r == ms) - var h = 3 + ((vs-g)/vm) + hue6; - else - var h = 5 - ((vs-r)/vm) + hue6; - } - if (h < 0) h+=6; - if (h >= 6) h-=6; - var m = (l+l-v); - var sextant = h>>0; - if (sextant == 0) { - r = v*255; g = (m+((v-m)*(h-sextant)))*255; b = m*255; - } else if (sextant == 1) { - r = (v-((v-m)*(h-sextant)))*255; g = v*255; b = m*255; - } else if (sextant == 2) { - r = m*255; g = v*255; b = (m+((v-m)*(h-sextant)))*255; - } else if (sextant == 3) { - r = m*255; g = (v-((v-m)*(h-sextant)))*255; b = v*255; - } else if (sextant == 4) { - r = (m+((v-m)*(h-sextant)))*255; g = m*255; b = v*255; - } else if (sextant == 5) { - r = v*255; g = m*255; b = (v-((v-m)*(h-sextant)))*255; - } - } - } - } - - if (lightness < 0) { - r *= lightp1; - g *= lightp1; - b *= lightp1; - } else if (lightness > 0) { - r = r * lightm1 + light255; - g = g * lightm1 + light255; - b = b * lightm1 + light255; - } - - if (r < 0) - data[pix] = 0 - else if (r > 255) - data[pix] = 255 - else - data[pix] = r; - - if (g < 0) - data[pix1] = 0 - else if (g > 255) - data[pix1] = 255 - else - data[pix1] = g; - - if (b < 0) - data[pix2] = 0 - else if (b > 255) - data[pix2] = 255 - else - data[pix2] = b; - - } - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } - -} diff --git a/actions/invert.js b/actions/invert.js deleted file mode 100755 index 77cc94d..0000000 --- a/actions/invert.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Pixastic Lib - Invert filter - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.invert = { - process : function(params) { - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - - var invertAlpha = !!params.options.invertAlpha; - var rect = params.options.rect; - - var p = rect.width * rect.height; - - var pix = p*4, pix1 = pix + 1, pix2 = pix + 2, pix3 = pix + 3; - - while (p--) { - data[pix-=4] = 255 - data[pix]; - data[pix1-=4] = 255 - data[pix1]; - data[pix2-=4] = 255 - data[pix2]; - if (invertAlpha) - data[pix3-=4] = 255 - data[pix3]; - } - - return true; - } else if (Pixastic.Client.isIE()) { - params.image.style.filter += " invert"; - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE()); - } -} diff --git a/actions/laplace.js b/actions/laplace.js deleted file mode 100755 index abb099f..0000000 --- a/actions/laplace.js +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Pixastic Lib - Laplace filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.laplace = { - process : function(params) { - - var strength = 1.0; - var invert = !!(params.options.invert && params.options.invert != "false"); - var contrast = parseFloat(params.options.edgeStrength)||0; - - var greyLevel = parseInt(params.options.greyLevel)||0; - - contrast = -contrast; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var dataCopy = Pixastic.prepareData(params, true) - - var kernel = [ - [-1, -1, -1], - [-1, 8, -1], - [-1, -1, -1] - ]; - - var weight = 1/8; - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - - var nextY = (y == h) ? y - 1 : y; - var prevY = (y == 1) ? 0 : y-2; - - var offsetYPrev = prevY*w*4; - var offsetYNext = nextY*w*4; - - var x = w; - do { - var offset = offsetY + (x*4-4); - - var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4; - var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4; - - var r = ((-dataCopy[offsetPrev-4] - - dataCopy[offsetPrev] - - dataCopy[offsetPrev+4] - - dataCopy[offset-4] - - dataCopy[offset+4] - - dataCopy[offsetNext-4] - - dataCopy[offsetNext] - - dataCopy[offsetNext+4]) - + dataCopy[offset] * 8) - * weight; - - var g = ((-dataCopy[offsetPrev-3] - - dataCopy[offsetPrev+1] - - dataCopy[offsetPrev+5] - - dataCopy[offset-3] - - dataCopy[offset+5] - - dataCopy[offsetNext-3] - - dataCopy[offsetNext+1] - - dataCopy[offsetNext+5]) - + dataCopy[offset+1] * 8) - * weight; - - var b = ((-dataCopy[offsetPrev-2] - - dataCopy[offsetPrev+2] - - dataCopy[offsetPrev+6] - - dataCopy[offset-2] - - dataCopy[offset+6] - - dataCopy[offsetNext-2] - - dataCopy[offsetNext+2] - - dataCopy[offsetNext+6]) - + dataCopy[offset+2] * 8) - * weight; - - var brightness = ((r + g + b)/3) + greyLevel; - - if (contrast != 0) { - if (brightness > 127) { - brightness += ((brightness + 1) - 128) * contrast; - } else if (brightness < 127) { - brightness -= (brightness + 1) * contrast; - } - } - if (invert) { - brightness = 255 - brightness; - } - if (brightness < 0 ) brightness = 0; - if (brightness > 255 ) brightness = 255; - - data[offset] = data[offset+1] = data[offset+2] = brightness; - - } while (--x); - } while (--y); - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} - diff --git a/actions/lighten.js b/actions/lighten.js deleted file mode 100755 index 93c9093..0000000 --- a/actions/lighten.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Pixastic Lib - Lighten filter - v0.1.1 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.lighten = { - - process : function(params) { - var amount = parseFloat(params.options.amount) || 0; - amount = Math.max(-1, Math.min(1, amount)); - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var rect = params.options.rect; - - var p = rect.width * rect.height; - - var pix = p*4, pix1 = pix + 1, pix2 = pix + 2; - var mul = amount + 1; - - while (p--) { - if ((data[pix-=4] = data[pix] * mul) > 255) - data[pix] = 255; - - if ((data[pix1-=4] = data[pix1] * mul) > 255) - data[pix1] = 255; - - if ((data[pix2-=4] = data[pix2] * mul) > 255) - data[pix2] = 255; - - } - - return true; - - } else if (Pixastic.Client.isIE()) { - var img = params.image; - if (amount < 0) { - img.style.filter += " light()"; - img.filters[img.filters.length-1].addAmbient( - 255,255,255, - 100 * -amount - ); - } else if (amount > 0) { - img.style.filter += " light()"; - img.filters[img.filters.length-1].addAmbient( - 255,255,255, - 100 - ); - img.filters[img.filters.length-1].addAmbient( - 255,255,255, - 100 * amount - ); - } - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData() || Pixastic.Client.isIE()); - } -} diff --git a/actions/mosaic.js b/actions/mosaic.js deleted file mode 100755 index 6b5754c..0000000 --- a/actions/mosaic.js +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Pixastic Lib - Mosaic filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.mosaic = { - - process : function(params) { - var blockSize = Math.max(1,parseInt(params.options.blockSize,10)); - - if (Pixastic.Client.hasCanvasImageData()) { - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - var w4 = w*4; - var y = h; - - var ctx = params.canvas.getContext("2d"); - - var pixel = document.createElement("canvas"); - pixel.width = pixel.height = 1; - var pixelCtx = pixel.getContext("2d"); - - var copy = document.createElement("canvas"); - copy.width = w; - copy.height = h; - var copyCtx = copy.getContext("2d"); - copyCtx.drawImage(params.canvas,rect.left,rect.top,w,h, 0,0,w,h); - - for (var y=0;y w) - blockSizeX = w - x; - if (blockSizeY + y > h) - blockSizeY = h - y; - - pixelCtx.drawImage(copy, x, y, blockSizeX, blockSizeY, 0, 0, 1, 1); - var data = pixelCtx.getImageData(0,0,1,1).data; - ctx.fillStyle = "rgb(" + data[0] + "," + data[1] + "," + data[2] + ")"; - ctx.fillRect(rect.left + x, rect.top + y, blockSize, blockSize); - } - } - params.useData = false; - - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData()); - } -} \ No newline at end of file diff --git a/actions/noise.js b/actions/noise.js deleted file mode 100755 index 143bcc7..0000000 --- a/actions/noise.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Pixastic Lib - Noise filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.noise = { - - process : function(params) { - var amount = 0; - var strength = 0; - var mono = false; - - if (typeof params.options.amount != "undefined") - amount = parseFloat(params.options.amount)||0; - if (typeof params.options.strength != "undefined") - strength = parseFloat(params.options.strength)||0; - if (typeof params.options.mono != "undefined") - mono = !!(params.options.mono && params.options.mono != "false"); - - amount = Math.max(0,Math.min(1,amount)); - strength = Math.max(0,Math.min(1,strength)); - - var noise = 128 * strength; - var noise2 = noise / 2; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - var w4 = w*4; - var y = h; - var random = Math.random; - - do { - var offsetY = (y-1)*w4; - var x = w; - do { - var offset = offsetY + (x-1)*4; - if (random() < amount) { - if (mono) { - var pixelNoise = - noise2 + random() * noise; - var r = data[offset] + pixelNoise; - var g = data[offset+1] + pixelNoise; - var b = data[offset+2] + pixelNoise; - } else { - var r = data[offset] - noise2 + (random() * noise); - var g = data[offset+1] - noise2 + (random() * noise); - var b = data[offset+2] - noise2 + (random() * noise); - } - - if (r < 0 ) r = 0; - if (g < 0 ) g = 0; - if (b < 0 ) b = 0; - if (r > 255 ) r = 255; - if (g > 255 ) g = 255; - if (b > 255 ) b = 255; - - data[offset] = r; - data[offset+1] = g; - data[offset+2] = b; - } - } while (--x); - } while (--y); - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} - diff --git a/actions/pointillize.js b/actions/pointillize.js deleted file mode 100755 index 42de579..0000000 --- a/actions/pointillize.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Pixastic Lib - Pointillize filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.pointillize = { - - process : function(params) { - var radius = Math.max(1,parseInt(params.options.radius,10)); - var density = Math.min(5,Math.max(0,parseFloat(params.options.density)||0)); - var noise = Math.max(0,parseFloat(params.options.noise)||0); - var transparent = !!(params.options.transparent && params.options.transparent != "false"); - - if (Pixastic.Client.hasCanvasImageData()) { - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - var w4 = w*4; - var y = h; - - var ctx = params.canvas.getContext("2d"); - var canvasWidth = params.canvas.width; - var canvasHeight = params.canvas.height; - - var pixel = document.createElement("canvas"); - pixel.width = pixel.height = 1; - var pixelCtx = pixel.getContext("2d"); - - var copy = document.createElement("canvas"); - copy.width = w; - copy.height = h; - var copyCtx = copy.getContext("2d"); - copyCtx.drawImage(params.canvas,rect.left,rect.top,w,h, 0,0,w,h); - - var diameter = radius * 2; - - if (transparent) - ctx.clearRect(rect.left, rect.top, rect.width, rect.height); - - var noiseRadius = radius * noise; - - var dist = 1 / density; - - for (var y=0;y>0 : x; - rndY = noise ? (y+((Math.random()*2-1) * noiseRadius))>>0 : y; - - var pixX = rndX - radius; - var pixY = rndY - radius; - if (pixX < 0) pixX = 0; - if (pixY < 0) pixY = 0; - - var cx = rndX + rect.left; - var cy = rndY + rect.top; - if (cx < 0) cx = 0; - if (cx > canvasWidth) cx = canvasWidth; - if (cy < 0) cy = 0; - if (cy > canvasHeight) cy = canvasHeight; - - var diameterX = diameter; - var diameterY = diameter; - - if (diameterX + pixX > w) - diameterX = w - pixX; - if (diameterY + pixY > h) - diameterY = h - pixY; - if (diameterX < 1) diameterX = 1; - if (diameterY < 1) diameterY = 1; - - pixelCtx.drawImage(copy, pixX, pixY, diameterX, diameterY, 0, 0, 1, 1); - var data = pixelCtx.getImageData(0,0,1,1).data; - - ctx.fillStyle = "rgb(" + data[0] + "," + data[1] + "," + data[2] + ")"; - ctx.beginPath(); - ctx.arc(cx, cy, radius, 0, Math.PI*2, true); - ctx.closePath(); - ctx.fill(); - } - } - - params.useData = false; - - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData()); - } -} \ No newline at end of file diff --git a/actions/posterize.js b/actions/posterize.js deleted file mode 100755 index 1bee4b8..0000000 --- a/actions/posterize.js +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Pixastic Lib - Posterize effect - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.posterize = { - - process : function(params) { - - - var numLevels = 256; - if (typeof params.options.levels != "undefined") - numLevels = parseInt(params.options.levels,10)||1; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - - numLevels = Math.max(2,Math.min(256,numLevels)); - - var numAreas = 256 / numLevels; - var numValues = 256 / (numLevels-1); - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - var x = w; - do { - var offset = offsetY + (x-1)*4; - - var r = numValues * ((data[offset] / numAreas)>>0); - var g = numValues * ((data[offset+1] / numAreas)>>0); - var b = numValues * ((data[offset+2] / numAreas)>>0); - - if (r > 255) r = 255; - if (g > 255) g = 255; - if (b > 255) b = 255; - - data[offset] = r; - data[offset+1] = g; - data[offset+2] = b; - - } while (--x); - } while (--y); - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} - - diff --git a/actions/removenoise.js b/actions/removenoise.js deleted file mode 100755 index c5eca83..0000000 --- a/actions/removenoise.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Pixastic Lib - Remove noise - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.removenoise = { - process : function(params) { - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - - var nextY = (y == h) ? y - 1 : y; - var prevY = (y == 1) ? 0 : y-2; - - var offsetYPrev = prevY*w*4; - var offsetYNext = nextY*w*4; - - var x = w; - do { - var offset = offsetY + (x*4-4); - - var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4; - var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4; - - var minR, maxR, minG, maxG, minB, maxB; - - minR = maxR = data[offsetPrev]; - var r1 = data[offset-4], r2 = data[offset+4], r3 = data[offsetNext]; - if (r1 < minR) minR = r1; - if (r2 < minR) minR = r2; - if (r3 < minR) minR = r3; - if (r1 > maxR) maxR = r1; - if (r2 > maxR) maxR = r2; - if (r3 > maxR) maxR = r3; - - minG = maxG = data[offsetPrev+1]; - var g1 = data[offset-3], g2 = data[offset+5], g3 = data[offsetNext+1]; - if (g1 < minG) minG = g1; - if (g2 < minG) minG = g2; - if (g3 < minG) minG = g3; - if (g1 > maxG) maxG = g1; - if (g2 > maxG) maxG = g2; - if (g3 > maxG) maxG = g3; - - minB = maxB = data[offsetPrev+2]; - var b1 = data[offset-2], b2 = data[offset+6], b3 = data[offsetNext+2]; - if (b1 < minB) minB = b1; - if (b2 < minB) minB = b2; - if (b3 < minB) minB = b3; - if (b1 > maxB) maxB = b1; - if (b2 > maxB) maxB = b2; - if (b3 > maxB) maxB = b3; - - if (data[offset] > maxR) { - data[offset] = maxR; - } else if (data[offset] < minR) { - data[offset] = minR; - } - if (data[offset+1] > maxG) { - data[offset+1] = maxG; - } else if (data[offset+1] < minG) { - data[offset+1] = minG; - } - if (data[offset+2] > maxB) { - data[offset+2] = maxB; - } else if (data[offset+2] < minB) { - data[offset+2] = minB; - } - - } while (--x); - } while (--y); - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} \ No newline at end of file diff --git a/actions/resize.js b/actions/resize.js deleted file mode 100755 index 6f87636..0000000 --- a/actions/resize.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Pixastic Lib - Resize - v0.1.0 - * Copyright (c) 2009 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.resize = { - process : function(params) { - if (Pixastic.Client.hasCanvas()) { - var width = parseInt(params.options.width,10); - var height = parseInt(params.options.height,10); - var canvas = params.canvas; - - if (width < 1) width = 1; - if (width < 2) width = 2; - - var copy = document.createElement("canvas"); - copy.width = width; - copy.height = height; - - copy.getContext("2d").drawImage(canvas,0,0,width,height); - canvas.width = width; - canvas.height = height; - - canvas.getContext("2d").drawImage(copy,0,0); - - params.useData = false; - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvas(); - } -} - - diff --git a/actions/rotate.js b/actions/rotate.js deleted file mode 100755 index 20d0170..0000000 --- a/actions/rotate.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Pixastic Lib - Rotate - v0.1.0 - * Copyright (c) 2009 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.rotate = { - process : function(params) { - if (Pixastic.Client.hasCanvas()) { - var canvas = params.canvas; - - var width = params.width; - var height = params.height; - - var copy = document.createElement("canvas"); - copy.width = width; - copy.height = height; - copy.getContext("2d").drawImage(canvas,0,0,width,height); - - var angle = -parseFloat(params.options.angle) * Math.PI / 180; - - var dimAngle = angle; - if (dimAngle > Math.PI*0.5) - dimAngle = Math.PI - dimAngle; - if (dimAngle < -Math.PI*0.5) - dimAngle = -Math.PI - dimAngle; - - var diag = Math.sqrt(width*width + height*height); - - var diagAngle1 = Math.abs(dimAngle) - Math.abs(Math.atan2(height, width)); - var diagAngle2 = Math.abs(dimAngle) + Math.abs(Math.atan2(height, width)); - - var newWidth = Math.abs(Math.cos(diagAngle1) * diag); - var newHeight = Math.abs(Math.sin(diagAngle2) * diag); - - canvas.width = newWidth; - canvas.height = newHeight; - - var ctx = canvas.getContext("2d"); - ctx.translate(newWidth/2, newHeight/2); - ctx.rotate(angle); - ctx.drawImage(copy,-width/2,-height/2); - - params.useData = false; - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvas(); - } -} - - diff --git a/actions/sepia.js b/actions/sepia.js deleted file mode 100755 index 5131f2d..0000000 --- a/actions/sepia.js +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Pixastic Lib - Sepia filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.sepia = { - - process : function(params) { - var mode = (parseInt(params.options.mode,10)||0); - if (mode < 0) mode = 0; - if (mode > 1) mode = 1; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - var x = w; - do { - var offset = offsetY + (x-1)*4; - - if (mode) { - // a bit faster, but not as good - var d = data[offset] * 0.299 + data[offset+1] * 0.587 + data[offset+2] * 0.114; - var r = (d + 39); - var g = (d + 14); - var b = (d - 36); - } else { - // Microsoft - var or = data[offset]; - var og = data[offset+1]; - var ob = data[offset+2]; - - var r = (or * 0.393 + og * 0.769 + ob * 0.189); - var g = (or * 0.349 + og * 0.686 + ob * 0.168); - var b = (or * 0.272 + og * 0.534 + ob * 0.131); - } - - if (r < 0) r = 0; if (r > 255) r = 255; - if (g < 0) g = 0; if (g > 255) g = 255; - if (b < 0) b = 0; if (b > 255) b = 255; - - data[offset] = r; - data[offset+1] = g; - data[offset+2] = b; - - } while (--x); - } while (--y); - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} \ No newline at end of file diff --git a/actions/sharpen.js b/actions/sharpen.js deleted file mode 100755 index cbf7ba9..0000000 --- a/actions/sharpen.js +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Pixastic Lib - Sharpen filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.sharpen = { - process : function(params) { - - var strength = 0; - if (typeof params.options.amount != "undefined") - strength = parseFloat(params.options.amount)||0; - - if (strength < 0) strength = 0; - if (strength > 1) strength = 1; - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var dataCopy = Pixastic.prepareData(params, true) - - var mul = 15; - var mulOther = 1 + 3*strength; - - var kernel = [ - [0, -mulOther, 0], - [-mulOther, mul, -mulOther], - [0, -mulOther, 0] - ]; - - var weight = 0; - for (var i=0;i<3;i++) { - for (var j=0;j<3;j++) { - weight += kernel[i][j]; - } - } - - weight = 1 / weight; - - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - - mul *= weight; - mulOther *= weight; - - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - - var nextY = (y == h) ? y - 1 : y; - var prevY = (y == 1) ? 0 : y-2; - - var offsetYPrev = prevY*w4; - var offsetYNext = nextY*w4; - - var x = w; - do { - var offset = offsetY + (x*4-4); - - var offsetPrev = offsetYPrev + ((x == 1) ? 0 : x-2) * 4; - var offsetNext = offsetYNext + ((x == w) ? x-1 : x) * 4; - - var r = (( - - dataCopy[offsetPrev] - - dataCopy[offset-4] - - dataCopy[offset+4] - - dataCopy[offsetNext]) * mulOther - + dataCopy[offset] * mul - ); - - var g = (( - - dataCopy[offsetPrev+1] - - dataCopy[offset-3] - - dataCopy[offset+5] - - dataCopy[offsetNext+1]) * mulOther - + dataCopy[offset+1] * mul - ); - - var b = (( - - dataCopy[offsetPrev+2] - - dataCopy[offset-2] - - dataCopy[offset+6] - - dataCopy[offsetNext+2]) * mulOther - + dataCopy[offset+2] * mul - ); - - - if (r < 0 ) r = 0; - if (g < 0 ) g = 0; - if (b < 0 ) b = 0; - if (r > 255 ) r = 255; - if (g > 255 ) g = 255; - if (b > 255 ) b = 255; - - data[offset] = r; - data[offset+1] = g; - data[offset+2] = b; - - } while (--x); - } while (--y); - - return true; - - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} diff --git a/actions/solarize.js b/actions/solarize.js deleted file mode 100755 index 634c4b7..0000000 --- a/actions/solarize.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Pixastic Lib - Solarize filter - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -Pixastic.Actions.solarize = { - - process : function(params) { - var useAverage = !!(params.options.average && params.options.average != "false"); - - if (Pixastic.Client.hasCanvasImageData()) { - var data = Pixastic.prepareData(params); - var rect = params.options.rect; - var w = rect.width; - var h = rect.height; - var w4 = w*4; - var y = h; - do { - var offsetY = (y-1)*w4; - var x = w; - do { - var offset = offsetY + (x-1)*4; - - var r = data[offset]; - var g = data[offset+1]; - var b = data[offset+2]; - - if (r > 127) r = 255 - r; - if (g > 127) g = 255 - g; - if (b > 127) b = 255 - b; - - data[offset] = r; - data[offset+1] = g; - data[offset+2] = b; - - } while (--x); - } while (--y); - return true; - } - }, - checkSupport : function() { - return (Pixastic.Client.hasCanvasImageData()); - } -} \ No newline at end of file diff --git a/actions/unsharpmask.js b/actions/unsharpmask.js deleted file mode 100755 index b26701d..0000000 --- a/actions/unsharpmask.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Pixastic Lib - USM - v0.1.0 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - - -Pixastic.Actions.unsharpmask = { - process : function(params) { - - var amount = (parseFloat(params.options.amount)||0); - var blurAmount = parseFloat(params.options.radius)||0; - var threshold = parseFloat(params.options.threshold)||0; - - amount = Math.min(500,Math.max(0,amount)) / 2; - blurAmount = Math.min(5,Math.max(0,blurAmount)) / 10; - threshold = Math.min(255,Math.max(0,threshold)); - - threshold--; - var thresholdNeg = -threshold; - - amount *= 0.016; - amount++; - - if (Pixastic.Client.hasCanvasImageData()) { - var rect = params.options.rect; - - var blurCanvas = document.createElement("canvas"); - blurCanvas.width = params.width; - blurCanvas.height = params.height; - var blurCtx = blurCanvas.getContext("2d"); - blurCtx.drawImage(params.canvas,0,0); - - var scale = 2; - var smallWidth = Math.round(params.width / scale); - var smallHeight = Math.round(params.height / scale); - - var copy = document.createElement("canvas"); - copy.width = smallWidth; - copy.height = smallHeight; - - var steps = Math.round(blurAmount * 20); - - var copyCtx = copy.getContext("2d"); - for (var i=0;i threshold || difR < thresholdNeg) { - var blurR = blurData[offset]; - blurR = amount * difR + blurR; - data[offset] = blurR > 255 ? 255 : (blurR < 0 ? 0 : blurR); - } - - var difG = data[offset+1] - blurData[offset+1]; - if (difG > threshold || difG < thresholdNeg) { - var blurG = blurData[offset+1]; - blurG = amount * difG + blurG; - data[offset+1] = blurG > 255 ? 255 : (blurG < 0 ? 0 : blurG); - } - - var difB = data[offset+2] - blurData[offset+2]; - if (difB > threshold || difB < thresholdNeg) { - var blurB = blurData[offset+2]; - blurB = amount * difB + blurB; - data[offset+2] = blurB > 255 ? 255 : (blurB < 0 ? 0 : blurB); - } - - } while (--x); - } while (--y); - - return true; - } - }, - checkSupport : function() { - return Pixastic.Client.hasCanvasImageData(); - } -} - - - diff --git a/license.txt b/license.txt deleted file mode 100755 index 06f9651..0000000 --- a/license.txt +++ /dev/null @@ -1,469 +0,0 @@ - MOZILLA PUBLIC LICENSE - Version 1.1 - - --------------- - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW - PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE - EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO - THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the NPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A -Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] diff --git a/pixastic.core.js b/pixastic.core.js deleted file mode 100755 index f616e07..0000000 --- a/pixastic.core.js +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Pixastic Lib - Core Functions - v0.1.3 - * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/ - * License: [http://www.pixastic.com/lib/license.txt] - */ - -var Pixastic = (function() { - - - function addEvent(el, event, handler) { - if (el.addEventListener) - el.addEventListener(event, handler, false); - else if (el.attachEvent) - el.attachEvent("on" + event, handler); - } - - function onready(handler) { - var handlerDone = false; - var execHandler = function() { - if (!handlerDone) { - handlerDone = true; - handler(); - } - } - document.write("<"+"script defer src=\"//:\" id=\"__onload_ie_pixastic__\">"); - var script = document.getElementById("__onload_ie_pixastic__"); - script.onreadystatechange = function() { - if (script.readyState == "complete") { - script.parentNode.removeChild(script); - execHandler(); - } - } - if (document.addEventListener) - document.addEventListener("DOMContentLoaded", execHandler, false); - addEvent(window, "load", execHandler); - } - - function init() { - var imgEls = getElementsByClass("pixastic", null, "img"); - var canvasEls = getElementsByClass("pixastic", null, "canvas"); - var elements = imgEls.concat(canvasEls); - for (var i=0;i -1) { - var tmp = actionName; - actionName = tmp.substr(0, tmp.indexOf("(")); - var arg = tmp.match(/\((.*?)\)/); - if (arg[1]) { - arg = arg[1].split(";"); - for (var a=0;a 0) - return jQuery(newElements); - else - return this; - }; - -};