File Manager

Current Directory: /home/astoriaah/www/old15/components/com_jce/editor/libraries/pro/js
Viewing File: /home/astoriaah/www/old15/components/com_jce/editor/libraries/pro/js/filter.js
/* jce - 2.6.26 | 2018-01-31 | http://www.joomlacontenteditor.net | Copyright (C) 2006 - 2018 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */ !function(){function multiply(a,b){var i,j,k,col=[];for(i=0;i<5;i++){for(j=0;j<5;j++)col[j]=a[j+5*i];for(j=0;j<5;j++){var val=0;for(k=0;k<5;k++)val+=b[j+5*k]*col[k];a[j+5*i]=val}}return a}function adjustValue(value,limit){return Math.min(limit,Math.max(-limit,value))}var DELTA_INDEX=[0,.01,.02,.04,.05,.06,.07,.08,.1,.11,.12,.14,.15,.16,.17,.18,.2,.21,.22,.24,.25,.27,.28,.3,.32,.34,.36,.38,.4,.42,.44,.46,.48,.5,.53,.56,.59,.62,.65,.68,.71,.74,.77,.8,.83,.86,.89,.92,.95,.98,1,1.06,1.12,1.18,1.24,1.3,1.36,1.42,1.48,1.54,1.6,1.66,1.72,1.78,1.84,1.9,1.96,2,2.12,2.25,2.37,2.5,2.62,2.75,2.87,3,3.2,3.4,3.6,3.8,4,4.3,4.7,4.9,5,5.5,6,6.5,6.8,7,7.3,7.5,7.8,8,8.4,8.7,9,9.4,9.6,9.8,10],identity=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],ColorMatrix=function(data){this.data=data};ColorMatrix.prototype={brightness:function(value){return value=adjustValue(value,255),this.apply(multiply(identity,[1,0,0,0,value,0,1,0,0,value,0,0,1,0,value,0,0,0,1,0,0,0,0,0,1]))},contrast:function(value){value=adjustValue(value,100);var x;return value<0?x=127+value/100*127:(x=value%1,x=0==x?DELTA_INDEX[value]:DELTA_INDEX[value<<0]*(1-x)+DELTA_INDEX[(value<<0)+1]*x,x=127*x+127),this.apply(multiply(identity,[x/127,0,0,0,.5*(127-x),0,x/127,0,0,.5*(127-x),0,0,x/127,0,.5*(127-x),0,0,0,1,0,0,0,0,0,1]))},saturate:function(value){value=adjustValue(value,100);var x=1+(value>0?3*value/100:value/100),lumR=.3086,lumG=.6094,lumB=.082;return this.apply(multiply(identity,[lumR*(1-x)+x,lumG*(1-x),lumB*(1-x),0,0,lumR*(1-x),lumG*(1-x)+x,lumB*(1-x),0,0,lumR*(1-x),lumG*(1-x),lumB*(1-x)+x,0,0,0,0,0,1,0,0,0,0,0,1]))},hue:function(value){value=adjustValue(value,180)/180*Math.PI;var cosVal=Math.cos(value),sinVal=Math.sin(value),lumR=.213,lumG=.715,lumB=.072;return this.apply(multiply(identity,[lumR+cosVal*(1-lumR)+sinVal*-lumR,lumG+cosVal*-lumG+sinVal*-lumG,lumB+cosVal*-lumB+sinVal*(1-lumB),0,0,lumR+cosVal*-lumR+.143*sinVal,lumG+cosVal*(1-lumG)+.14*sinVal,lumB+cosVal*-lumB+sinVal*-.283,0,0,lumR+cosVal*-lumR+sinVal*-(1-lumR),lumG+cosVal*-lumG+sinVal*lumG,lumB+cosVal*(1-lumB)+sinVal*lumB,0,0,0,0,0,1,0,0,0,0,0,1]))},polaroid:function(){return this.apply(multiply(identity,[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0]))},filter:function(name,value){var fn=this[name];return fn?fn.apply(this,[value]):this},apply:function(matrix){for(var r,g,b,a,data=this.data,l=data.length,m0=matrix[0],m1=matrix[1],m2=matrix[2],m3=matrix[3],m4=matrix[4],m5=matrix[5],m6=matrix[6],m7=matrix[7],m8=matrix[8],m9=matrix[9],m10=matrix[10],m11=matrix[11],m12=matrix[12],m13=matrix[13],m14=matrix[14],m15=matrix[15],m16=matrix[16],m17=matrix[17],m18=matrix[18],m19=matrix[19],i=0;i<l;i+=4)r=data[i],g=data[i+1],b=data[i+2],a=data[i+3],data[i]=r*m0+g*m1+b*m2+a*m3+m4,data[i+1]=r*m5+g*m6+b*m7+a*m8+m9,data[i+2]=r*m10+g*m11+b*m12+a*m13+m14,data[i+3]=r*m15+g*m16+b*m17+a*m18+m19;return this}},window.ColorMatrix=ColorMatrix}(),function($){var ImageFilter=new WebGLImageFilter,Filter=function(canvas){return this.canvas=canvas,this.context=canvas.getContext("2d"),this.filters=[],this};Filter.prototype={apply:function(){for(var self=this,i=0;i<this.filters.length;i++){var item=self.filters[i],fn=self[item.name];fn&&fn.call(self,[item.values]),self.filters.splice(i)}return this},add:function(filter,values){return this.filters.push({name:filter,values:values}),this},reset:function(){return this.filters=[],this},_applyWebGlFilter:function(filter,value){ImageFilter.addFilter(filter,value);try{filteredImage=ImageFilter.apply(this.canvas)}catch(err){}filteredImage&&this.context.drawImage(filteredImage,0,0),ImageFilter.reset()},_applyColorMatrixFilter:function(filter,amount){var imageData=this.context.getImageData(0,0,this.canvas.width,this.canvas.height);new ColorMatrix(imageData.data).filter(filter,amount),this.context.putImageData(imageData,0,0)},grayscale:function(amount,save){this.context,this.canvas.width,this.canvas.height;this._filter(function(data){for(var i=0,len=data.length;i<len;i+=4){var v=.299*data[i]+.587*data[i+1]+.114*data[i+2];data[i]=v,data[i+1]=v,data[i+2]=v}})},sepia:function(amount,save){this.context,this.canvas.width,this.canvas.height;this._filter(function(data,start,end){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2];data[i]=.393*r+.769*g+.189*b,data[i+1]=.349*r+.686*g+.168*b,data[i+2]=.272*r+.534*g+.131*b}})},invert:function(amount,save){this.context,this.canvas.width,this.canvas.height;this._filter(function(data){for(var i=0,len=data.length;i<len;i+=4)data[i]=255-data[i],data[i+1]=255-data[i+1],data[i+2]=255-data[i+2]})},threshold:function(threshold,save){this.context,this.canvas.width,this.canvas.height;save&&this.save(),threshold=parseInt(threshold)||128,this._filter(function(data,start,end){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2],v=Math.round((r+g+b)/3)>=threshold?255:0;data[i]=v,data[i+1]=v,data[i+2]=v}},threshold)},brightness:function(amount,save){this.context,this.canvas.width,this.canvas.height;amount=Math.min(100,Math.max(-100,amount)),this._filter(function(data){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2];data[i]=Math.max(0,Math.min(255,Math.round(r+amount))),data[i+1]=Math.max(0,Math.min(255,Math.round(g+amount))),data[i+2]=Math.max(0,Math.min(255,Math.round(b+amount)))}})},contrast:function(amount,save){function n(x){return Math.max(0,Math.min(255,x))}this.context,this.canvas.width,this.canvas.height;amount=Math.max(-100,Math.min(100,amount));var factor=1;factor=amount>0?1+amount/100:(100-Math.abs(amount))/100,this._filter(function(data){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2];r=n(factor*(r-128)+128),g=n(factor*(g-128)+128),b=n(factor*(b-128)+128),data[i]=Math.min(255,Math.max(0,Math.round(r))),data[i+1]=Math.min(255,Math.max(0,Math.round(g))),data[i+2]=Math.min(255,Math.max(0,Math.round(b)))}})},saturate:function(amount,save){this.context,this.canvas.width,this.canvas.height;amount=parseFloat(amount)/100,amount=Math.max(-1,Math.min(1,amount)),this._filter(function(data){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2],average=(r+g+b)/3;r+=Math.round((r-average)*amount),g+=Math.round((g-average)*amount),b+=Math.round((b-average)*amount),data[i]=Math.min(255,Math.max(0,r)),data[i+1]=Math.min(255,Math.max(0,g)),data[i+2]=Math.min(255,Math.max(0,b))}})},desaturate:function(amount,save){return this.saturate(0-amount,save),this},hue:function(amount,save){this.context,this.canvas.width,this.canvas.height;return this._applyColorMatrixFilter("hue",amount),this},gamma:function(amount,save){return amount/=100,this._filter(function(data,start,end){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2];data[i]=255*Math.pow(r/255,1-amount),data[i+1]=255*Math.pow(g/255,1-amount),data[i+2]=255*Math.pow(b/255,1-amount)}}),this},exposure:function(amount,save){return amount/=10,this._filter(function(data,start,end){for(var i=0,len=data.length;i<len;i+=4){var r=data[i],g=data[i+1],b=data[i+2];data[i]=255*(1-Math.exp(-(r/255)*amount)),data[i+1]=255*(1-Math.exp(-(g/255)*amount)),data[i+2]=255*(1-Math.exp(-(b/255)*amount))}}),this},blur:function(amount,save){this.context,this.canvas.width,this.canvas.height;if(ImageFilter)return amount/=10,this._applyWebGlFilter("blur",amount);var matrix=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9];if(amount){amount=Math.floor(amount/10),amount=Math.max(1,amount);for(var i=0;i<amount;i++)this.convolution(matrix)}},sharpen:function(amount,save){if(ImageFilter)return amount/=100,this._applyWebGlFilter("sharpen",amount);var matrix=[0,-1,0,-1,5,-1,0,-1,0];if(amount){amount=Math.floor(amount/10),amount=Math.max(1,amount);for(var i=0;i<amount;i++)this.convolution(matrix)}},polaroid:function(save){if(ImageFilter)return this._applyWebGlFilter("polaroid")},convolution:function(matrix){for(var ctx=this.context,sw=this.canvas.width,sh=this.canvas.height,side=Math.round(Math.sqrt(matrix.length)),halfSide=Math.floor(side/2),w=sw,h=sh,input=ctx.getImageData(0,0,sw,sh),output=ctx.createImageData(sw,sh),src=input.data,dst=output.data,y=0;y<h;y++)for(var x=0;x<w;x++){for(var sy=y,sx=x,dstOff=4*(y*w+x),r=0,g=0,b=0,a=0,cy=0;cy<side;cy++)for(var cx=0;cx<side;cx++){var scy=sy+cy-halfSide,scx=sx+cx-halfSide;if(scy>=0&&scy<sh&&scx>=0&&scx<sw){var srcOff=4*(scy*sw+scx),wt=matrix[cy*side+cx];r+=src[srcOff]*wt,g+=src[srcOff+1]*wt,b+=src[srcOff+2]*wt,a+=src[srcOff+3]*wt}}dst[dstOff]=r,dst[dstOff+1]=g,dst[dstOff+2]=b,dst[dstOff+3]=a}ctx.putImageData(output,0,0)},_filter:function(fn,amount){function processNext(){var now,rect=rects[rectIndex++];rect&&(imageData=ctx.getImageData(rect.x,rect.y,rect.w,rect.h),fn(imageData.data),ctx.putImageData(imageData,rect.x,rect.y),now=(new Date).getTime(),now-lastTime<1e3?processNext():(lastTime=now,window.setTimeout(processNext,0)))}var rx,ry,imageData,lastTime,startTime,ctx=this.context,size=480,rects=[],rectIndex=0,x=0,y=0,w=this.canvas.width,h=this.canvas.height;for(ry=y;ry<h;ry+=size)for(rx=x;rx<w;rx+=size)rects.push({x:rx,y:ry,w:rx+size>w?w-rx:size,h:ry+size>h?h-ry:size});lastTime=startTime=(new Date).getTime(),processNext()}},window.Filter=Filter}(jQuery);