/* Canvas Query 0.8.1 http://canvasquery.org (c) 2012-2013 http://rezoner.net Canvas Query may be freely distributed under the MIT license. */ (function(l,v){var y=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);l.requestAnimationFrame=l.requestAnimationFrame||l.webkitRequestAnimationFrame||l.mozRequestAnimationFrame||l.oRequestAnimationFrame||l.msRequestAnimationFrame||function(a){l.setTimeout(a,1E3/60)};var g=function(a){if(0===arguments.length){var c=g.createCanvas(l.innerWidth,l.innerHeight);l.addEventListener("resize",function(){})}else if("string"===typeof a)c=document.querySelector(a);else if("number"===typeof a)c= g.createCanvas(arguments[0],arguments[1]);else if(a instanceof Image||a instanceof HTMLImageElement)c=g.createCanvas(a);else{if(a instanceof g.Wrapper)return a;c=a}return new g.Wrapper(c)};g.extend=function(){for(var a=1;aa?2*a*c:1-2*(1-a)*(1-c))|0))},hardLight:function(a,c){return g.blendFunctions.overlay(c,a)},softLight:function(a,c){a/=255;c/=255;return g.limitValue(255*((1-2*c)*a*a+2*c*a),0,255)},dodge:function(a, c){return Math.min(256*a/(255-c+1),255)},burn:function(a,c){return 255-Math.min(256*(255-a)/(c+1),255)},multiply:function(a,c){return c*a/255},divide:function(a,c){return Math.min(256*a/(c+1),255)},screen:function(a,c){return 255-(255-c)*(255-a)/255},grainExtract:function(a,c){return g.limitValue(a-c+128,0,255)},grainMerge:function(a,c){return g.limitValue(a+c-128,0,255)},difference:function(a,c){return Math.abs(a-c)},addition:function(a,c){return Math.min(a+c,255)},substract:function(a,c){return Math.max(a- c,0)},darkenOnly:function(a,c){return Math.min(a,c)},lightenOnly:function(a,c){return Math.max(a,c)},color:function(a,c){var b=g.rgbToHsl(a),d=g.rgbToHsl(c);return g.hslToRgb(d[0],d[1],b[2])},hue:function(a,c){var b=g.rgbToHsv(a),d=g.rgbToHsv(c);return d[1]?g.hsvToRgb(d[0],b[1],b[2]):g.hsvToRgb(b[0],b[1],b[2])},value:function(a,c){var b=g.rgbToHsv(a),d=g.rgbToHsv(c);return g.hsvToRgb(b[0],b[1],d[2])},saturation:function(a,c){var b=g.rgbToHsv(a),d=g.rgbToHsv(c);return g.hsvToRgb(b[0],d[1],b[2])}}, blend:function(a,c,b,d){"undefined"===typeof d&&(d=1);a=g(a);c=g(c);var f=c.context,e=a.context.getImageData(0,0,a.canvas.width,a.canvas.height);c=f.getImageData(0,0,c.canvas.width,c.canvas.height);e=e.data;c=c.data;var f=this.createImageData(a.canvas.width,a.canvas.height),h=f.data,m=g.blendFunctions[b];if(-1!==g.specialBlendFunctions.indexOf(b)){b=0;for(var j=e.length;bb?b:a},mix:function(a,c,b){return a+(c-a)*b},hexToRgb:function(a){return["0x"+a[1]+a[2]|0,"0x"+a[3]+a[4]|0,"0x"+a[5]+a[6]|0]},rgbToHex:function(a, c,b){return"#"+(16777216+(a<<16)+(c<<8)+b).toString(16).slice(1,7)},rgbToHsl:function(a,c,b){a instanceof Array&&(b=a[2],c=a[1],a=a[0]);a/=255;c/=255;b/=255;var d=Math.max(a,c,b),f=Math.min(a,c,b),e,h=(d+f)/2;if(d==f)e=f=0;else{var g=d-f,f=0.5c&&(c+=1);1c?b:c<2/3? a+6*(b-a)*(2/3-c):a},f=0.5>b?b*(1+c):b+c-b*c,e=2*b-f;b=d(e,f,a+1/3);c=d(e,f,a);a=d(e,f,a-1/3)}return[255*b|0,255*c|0,255*a|0]},rgbToHsv:function(a,c,b){a instanceof Array&&(b=a[2],c=a[1],a=a[0]);a/=255;c/=255;b/=255;var d=Math.max(a,c,b),f=Math.min(a,c,b),e,h=d-f;if(d==f)e=0;else{switch(d){case a:e=(c-b)/h+(ca?(d=this.canvas.height*(a/this.canvas.width)|0,b=a):(b=this.canvas.width,d=this.canvas.height):null===a&&(this.canvas.width>a?(b=this.canvas.width*(c/this.canvas.height)|0,d=c):(b=this.canvas.width,d=this.canvas.height));b= g(b,d).drawImage(this.canvas,0,0,this.canvas.width,this.canvas.height,0,0,b,d);this.canvas=b.canvas;this.context=b.context;return this},trim:function(a){var c;a?(a=g.color(a).toArray(),c=!a[3]):c=!0;for(var b=this.context.getImageData(0,0,this.canvas.width,this.canvas.height).data,d=[this.canvas.width,this.canvas.height,0,0],f=0,e=b.length;fd[2]&&(d[2]=h);md[3]&&(d[3]=m)}0===d[2]||0===d[3]||this.crop(d[0],d[1],d[2]-d[0]+1,d[3]-d[1]+1);return this},resizePixel:function(a){var c=this.context.getImageData(0,0,this.canvas.width,this.canvas.height).data,b=document.createElement("canvas"),d=b.context=b.getContext("2d");b.width=this.canvas.width*a|0;b.height=this.canvas.height*a|0;for(var f=0,e=c.length;fd&&(k[++j]="",g=0);k[j]+=a;g+=l}else k=[a];for(n=0;nMath.abs(e[0]-a)?g.wrapValue(c,0,1):e[0],f=g.hslToRgb(f,e[1],e[2]),d[h+0]=f[0],d[h+1]=f[1],d[h+2]=f[2]; this.context.putImageData(b,0,0);return this},invert:function(){for(var a=this.context.getImageData(0,0,this.canvas.width,this.canvas.height),c=a.data,b=0,d=c.length;bd&&(k[++a]="",g=0);k[a]+=j;g+=l}}else k=[a];for(n=0;nc&&(h[++e]="",f=0);h[e]+=j;f+=k}else h=[a],c=this.measureText(a).width;return{height:0.6*h.length*d|0,width:c}},paperBag:function(a,c,b,d,f,e){this.beginPath();this.moveTo(a,c);this.quadraticCurveTo(a+b/2|0,c+d*e|0,a+b,c);this.quadraticCurveTo(a+b-b*f|0,c+d/2|0,a+b,c+d);this.quadraticCurveTo(a+b/2|0,c+d-d*e|0,a,c+d);this.quadraticCurveTo(a+b*f|0,c+d/2|0,a,c)},borderImage:function(a,c,b,d,f,e,h,g, j,k){this.drawImage(a,j,0,a.width-j-h,e,c+j,b,d-j-h,e);this.drawImage(a,j,a.height-g,a.width-j-h,g,c+j,b+f-g,d-j-h,g);this.drawImage(a,0,e,j,a.height-g-e,c,b+e,j,f-g-e);this.drawImage(a,a.width-h,e,h,a.height-g-e,c+d-h,b+e,h,f-g-e);this.drawImage(a,0,0,j,e,c,b,j,e);this.drawImage(a,a.width-h,0,h,e,c+d-h,b,h,e);this.drawImage(a,a.width-h,a.height-g,h,g,c+d-h,b+f-g,h,g);this.drawImage(a,0,a.height-g,j,g,c,b+f-g,j,g);k&&("string"===typeof k?this.fillStyle(k).fillRect(c+j,b+e,d-j-h,f-e-g):this.drawImage(a, j,e,a.width-h-j,a.height-g-e,c+j,b+e,d-j-h,f-e-g))},convolve:function(a,c,b){"undefined"===typeof b&&(b=1);"undefined"===typeof c&&(c=1);for(var d=this.context.getImageData(0,0,this.canvas.width,this.canvas.height),f=Math.sqrt(a.length)+0.5|0,e=f/2|0,h=d.data,m=d.width,d=d.height,j=g.createImageData(this.canvas.width,this.canvas.height),k=j.data,n=1;n=a?255:0;this.context.putImageData(c,0,0);return this},sepia:function(){for(var a=this.context.getImageData(0,0,this.canvas.width,this.canvas.height),c=a.data,b=0;bl&&eMath.abs(c)?0=c.which?String.fromCharCode(c.which).toLowerCase():g.keycodes[c.which];a.call(self, c)});return this},onKeyUp:function(a){document.addEventListener("keyup",function(c){c=48<=c.which&&90>=c.which?String.fromCharCode(c.which).toLowerCase():g.keycodes[c.which];a.call(self,c)});return this},onResize:function(a){var c=this;l.addEventListener("resize",function(){a.call(c,l.innerWidth,l.innerHeight)});a.call(c,l.innerWidth,l.innerHeight);return this},onDropImage:function(a){var c=this;document.addEventListener("drop",function(b){b.stopPropagation();b.preventDefault();b=b.dataTransfer.files[0]; if(!/image/i.test(b.type))return!1;var d=new FileReader;d.onload=function(b){var d=new Image;d.onload=function(){a.call(c,this)};d.src=b.target.result};d.readAsDataURL(b)});document.addEventListener("dragover",function(a){a.preventDefault()});return this}};for(var u="arc arcTo beginPath bezierCurveTo clearRect clip closePath createImageData createLinearGradient createRadialGradient createPattern drawFocusRing drawImage fill fillRect fillText getImageData isPointInPath lineTo measureText moveTo putImageData quadraticCurveTo rect restore rotate save scale setTransform stroke strokeRect strokeText transform translate".split(" "), q=0;q