diff --git a/ImageProcessing.html b/ImageProcessing.html new file mode 100644 index 0000000..494fa89 --- /dev/null +++ b/ImageProcessing.html @@ -0,0 +1,84 @@ + + + + + + + + 图像去模糊 + + + + + + + + + +
图像去模糊
+
+
+
模糊方向调节
+
sigma调节
+
开始处理
+
反色
+
灰度处理
+
灰度阈值
+
高斯模糊
+
锐化
+ + <- +
+ + +
+

菜单

+ +
+ +
+
+
+ + +
+
+
+ +
+ + + \ No newline at end of file diff --git a/icon/filter.jpg b/icon/filter.jpg new file mode 100644 index 0000000..c08624a Binary files /dev/null and b/icon/filter.jpg differ diff --git a/icon/new.jpg b/icon/new.jpg new file mode 100644 index 0000000..55d93d4 Binary files /dev/null and b/icon/new.jpg differ diff --git a/icon/open.jpg b/icon/open.jpg new file mode 100644 index 0000000..42538ee Binary files /dev/null and b/icon/open.jpg differ diff --git a/icon/save.png b/icon/save.png new file mode 100644 index 0000000..c27fa87 Binary files /dev/null and b/icon/save.png differ diff --git a/icon/wipe.jpg b/icon/wipe.jpg new file mode 100644 index 0000000..5d62a4d Binary files /dev/null and b/icon/wipe.jpg differ diff --git a/img/big.jpg b/img/big.jpg new file mode 100644 index 0000000..0e37443 Binary files /dev/null and b/img/big.jpg differ diff --git a/img/bulding.jpg b/img/bulding.jpg new file mode 100644 index 0000000..a20cd64 Binary files /dev/null and b/img/bulding.jpg differ diff --git a/img/girl.jpg b/img/girl.jpg new file mode 100644 index 0000000..eaf0663 Binary files /dev/null and b/img/girl.jpg differ diff --git a/img/girl.png b/img/girl.png new file mode 100644 index 0000000..a7de259 Binary files /dev/null and b/img/girl.png differ diff --git a/img/inner.jpg b/img/inner.jpg new file mode 100644 index 0000000..6226f8f Binary files /dev/null and b/img/inner.jpg differ diff --git a/img/pet.jpg b/img/pet.jpg new file mode 100644 index 0000000..fff6517 Binary files /dev/null and b/img/pet.jpg differ diff --git a/img/scen.jpg b/img/scen.jpg new file mode 100644 index 0000000..8fe7d46 Binary files /dev/null and b/img/scen.jpg differ diff --git a/img/small.jpg b/img/small.jpg new file mode 100644 index 0000000..b36ed8f Binary files /dev/null and b/img/small.jpg differ diff --git a/img/stop.jpg b/img/stop.jpg new file mode 100644 index 0000000..28f0076 Binary files /dev/null and b/img/stop.jpg differ diff --git a/js/combined/alloyimage.js b/js/combined/alloyimage.js new file mode 100644 index 0000000..ecd3713 --- /dev/null +++ b/js/combined/alloyimage.js @@ -0,0 +1,52 @@ +Array.prototype.del=function(h){h.sort();for(var p=this.concat([]),c=h.length-1;0<=c;c--)p=p.slice(0,h[c]).concat(p.slice(h[c]+1));return p};try{HTMLImageElement.prototype.loadOnce=function(h){var p=0;this.onload=function(){p||h.call(this,null);p++}}}catch(e$$10){window={}} +(function(h){function p(){this.readyState&&(this.readyState=0,this.dorsyWorker.startWorker())}var c={lib:[],init:function(){this.require("config")},module:function(a,b){this.lib[a]=b.call(null,this)},require:function(a){var b=this,f=document.createElement("script");document.body.appendChild(f);f.src="./js/module/"+a+".js";f.onload=f.onerror=function(a){b.handlerror(a)}},handlerror:function(){},destroySelf:function(a){delete window[h];throw Error(a);},reflect:function(a,b,f){a=this.lib.config.getModuleName(a); +return this.lib[a].process(b,f)},reflectEasy:function(a){a=this.lib.config.getEasyFun(a);return this.lib.easy.getFun(a)},add:function(a,b,f,i,d,g,c,m){return this.lib.addLayer.add(a,b,f,i,d,g,c,m)},worker:function(){},applyMatrix:function(){}};window[h]=function(a,b,f){if(this instanceof window[h]){this.startTime=+new Date;var i=document.createElement("canvas"),d=i.getContext("2d");isNaN(a)?(i.width=parseInt(a.width),i.height=parseInt(a.height),b=getComputedStyle(a),imgWidth=parseInt(b.getPropertyValue("width")), +imgHeight=parseInt(b.getPropertyValue("height")),isNaN(imgWidth)?d.drawImage(a,0,0):d.drawImage(a,0,0,imgWidth,imgHeight)):(i.width=a,i.height=b,d.fillStyle=f||"#fff",d.fillRect(0,0,a,b));this.canvas=i;this.context=d;this.imgData=d.getImageData(0,0,i.width,i.height);this.name=h+"_"+Math.random();this.canvas.id=this.name;this.layers=[];a=document.createElement("canvas");a.width=i.width;a.height=i.height;this.ctxCanvas=a;this.ctxContext=i.getContext("2d");this.useWorker=c.useWorker;this.readyState= +1;this.useWorker&&(this.dorsyWorker=c.lib.dorsyWorker(this))}else return new window[h](a,b,f)};window[h].module=function(a,b){c.module(a,b)};window[h].dorsyMath=function(){return c.lib.dorsyMath};window[h].setName=function(a){c.name=a||"alloyimage.js"};window[h].useWorker=function(a){if(window.Worker){a=a||"";/[\/\\]$/.test(a)&&(a+=c.name);""==a&&(a="alloyimage.js");c.useWorker=1;c.path=a;var b=new XMLHttpRequest;b.onreadystatechange=function(){4==b.readyState&&"404"==b.status&&c.destroySelf("AI_ERROR\uff1a\u4f7f\u7528worker\u65f6\uff0cai\u6587\u4ef6\u8def\u5f84\u6307\u5b9a\u9519\u8bef\nAI_ERROR: error occured while using web worker since indicate the wrong path of file ai")}; +b.open("GET",a,!1);b.send()}else this.useWorker=0,console.log("AI_WARNING: \u6d4f\u89c8\u5668\u4e0d\u652f\u6301web worker, \u81ea\u52a8\u5207\u6362\u4e3a\u5355\u7ebf\u7a0b\nAI_WARNING: the brower doesn't support Web Worker")};onmessage=function(a){var a=a.data,b;"act"==a[0]?b=c.reflect(a[1],a[2],a[3]):"add"==a[0]&&(b=c.add.apply(c,a[1]));postMessage(b)};window[h].prototype={act:function(a,b){var f=[],f=Array.prototype.slice.call(arguments,1);this.useWorker?(this.dorsyWorker.queue.push(["act",a,f]), +p.call(this)):c.reflect(a,this.imgData,f);return this},view:function(a,b,f,i,d){var c=this.clone();c.type=1;this.addLayer(c,"\u6b63\u5e38",0,0);c.act(a,b,f,i,d);return this},excute:function(){var a=this.layers,b=a.length;a[b-1]&&1==a[b-1][0].type&&(this.imgData=a[b-1][0].imgData,delete a[b-1])},cancel:function(){var a=this.layers,b=a.length;a[b-1]&&1==a[b-1][0].type&&delete a[b-1]},show:function(a,b,f){if(!f&&this.useWorker)return this.dorsyWorker.queue.push(["show",a,b]),this;if(0==this.layers.length)this.tempPsLib= +{imgData:this.imgData};else{f=new window[h](this.canvas.width,this.canvas.height);f.add(this,"\u6b63\u5e38",0,0,b);this.tempPsLib=f;for(var i=0;id;d++)f[d]>c&&(c=f[d]);for(d=0;255>d;d++)g=f[d]||0,g=a.height-0.8*(g/c)*a.height,b.lineTo(d/256*a.width,g,1,1);b.lineTo(a.width+10,a.height);b.fill()},ps:function(a){var b;b=c.reflectEasy(a).call(this);this.logTime("\u7ec4\u5408\u6548\u679c"+a);return b},logTime:function(a){console.log(a+": "+(+new Date-this.startTime)/1E3+"s")},ctx:function(a){var b= +this.ctxContext;b.putImageData(this.imgData,0,0);a.call(b);this.imgData=b.getImageData(0,0,this.canvas.width,this.canvas.height);return this},notify:function(a){"readyStateOK"==a&&(this.readyState=1)},complete:function(a){this.useWorker?this.dorsyWorker.queue.push(["complete",a]):a()}}})("psLib");window.AlloyImage=$AI=window.psLib;(function(h){window[h].module("ImageEnhance",function(){return{process:function(p){for(var c=p.data,a=0,b=c.length;ae&&0!=j[n+3];e++)switch(d[l+3]=j[n+3],a){case "\u989c\u8272\u51cf\u6de1":m[e]&& +(k=d[l+e]+d[l+e]*j[n+e]/(255-j[n+e]),d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u53d8\u6697":m[e]&&(k=d[l+e]j[n+e]?d[l+e]:j[n+e],d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u6b63\u7247\u53e0\u5e95":m[e]&&(k=parseInt(d[l+e]*j[n+e]/255),d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u6ee4\u8272":m[e]&&(k=parseInt(255-(255-d[l+e])*(255-j[n+e])/255),d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u53e0\u52a0":m[e]&&(k=127.5>=d[l+e]?d[l+e]*j[n+ +e]/127.5:255-(255-d[l+e])*(255-j[n+e])/127.5,d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u5f3a\u5149":m[e]&&(k=127.5>=j[n+e]?d[l+e]*j[n+e]/127.5:d[l+e]+(255-d[l+e])*(j[n+e]-127.5)/127.5,d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u5dee\u503c":m[e]&&(k=d[l+e]>j[n+e]?d[l+e]-j[n+e]:j[n+e]-d[l+e],d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u6392\u9664":m[e]&&(k=d[l+e]+j[n+e]-d[l+e]*j[n+e]/127.5,d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u70b9\u5149":m[e]&&(k=d[l+e]<2*j[n+e]-255?2*j[n+e]-255:d[l+e]<2*j[n+e]?d[l+e]:2*j[n+e], +d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u989c\u8272\u52a0\u6df1":m[e]&&(k=255-255*(255-d[l+e])/j[n+e],d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u7ebf\u6027\u52a0\u6df1":m[e]&&(k=d[l+e]+j[n+e],k=255j[n+e]?((2*j[n+e]-255)*(255-d[l+e])/65025+1)*d[l+e]:(2*j[n+e]-255)*(Math.sqrt(d[l+e]/255)-d[l+e]/255)+d[l+e],d[l+e]=(1-b)*d[l+e]+b*k); +break;case "\u4eae\u5149":m[e]&&(k=127.5>j[n+e]?255*(1-(255-d[l+e])/(2*j[n+e])):d[l+e]/(2*(1-j[n+e]/255)),d[l+e]=(1-b)*d[l+e]+b*k);break;case "\u7ebf\u6027\u5149":m[e]&&(k=d[l+e]+2*j[n+e]-255,k=255g;g++)a[i+g]=(a[i+g]-127.5*(1-b))*f+127.5*(1+b);return p}}})})("psLib"); +(function(h){window[h].module("applyMatrix",function(p){return{process:function(c){for(var a=c.data,b=c.width,f=new p.lib.dorsyMath.Matrix([-2,-4,-4,-4,-2,-4,0,8,0,-4,-4,8,24,8,-4,-4,0,8,0,-4,-2,-4,-4,-4,-2],25,1),i=[],d=0,g=a.length;de;e++)for(var n=m+e,l=-2;3>l;l++)for(var r=4*(n*b+(k+l)),j=0;3>j;j++)h[j].push(a[r+j]);m=(new p.lib.dorsyMath.Matrix(h,3,matrixSize)).mutiply(f);for(j=0;3>j;j++)i[d+j]=m.data[j];i[d+ +4]=a[d+4]}}d=0;for(g=a.length;dm;m++)b[4*k+m]=b[4*j+m];return p}}})})("psLib"); +(function(h){window[h].module("curve",function(p){return{process:function(c,a){for(var b=p.lib.dorsyMath.lagrange(a[0],a[1]),f=c.data,i=c.width,d=c.height,g=0;gk;k++)f[4*m+k]=b(f[4*m+k]);return c}}})})("psLib"); +(function(h){window[h].module("darkCorner",function(p){return{process:function(c,a){for(var b=parseInt(a[0])||3,f=a[1]||30,i=c.data,d=c.width,g=c.height,j=2*d/3,m=1*g/2,k=p.lib.dorsyMath.distance([j,m]),b=k*(1-b/10),h=0;hl;l++){var r;r=i[4*n+l];var q=(p.lib.dorsyMath.distance([h,e],[j,m])-b)/(k-b);0>q&&(q=0);r=(0*Math.pow(1-q,3)+0.06*q*Math.pow(1-q,2)+3*0.3*q*q*(1-q)+1*Math.pow(q,3))*r*f/255;i[4*n+l]-=r}return c}}})})("psLib"); +(function(h){window[h].module("dorsyMath",function(p){var c={FFT1:function(a){function b(){i++;for(var g=f/Math.pow(2,i),m=f/g,k=0;ke;e++)r[e].push(i[v+e]);n=(new p.lib.dorsyMath.Matrix(r,3,g)).mutiply(b);for(e=0;3> +e;e++)j[k+e]=n.data[e];j[k+4]=i[k+4]}}k=0;for(h=i.length;kb?2*Math.PI-c:c,d=1-3*Math.min(a,b,f)/(a+b+f);c>2*Math.PI&&(c=2*Math.PI);0>c&&(c=0);return{H:c,S:d,I:(a+b+f)/3}},HSIToRGB:function(a,b,f){0>a?(a%=2*Math.PI,a+=2*Math.PI):a%=2*Math.PI;if(a<=2*Math.PI/3)var c=f*(1-b),d=f*(1+b*Math.cos(a)/Math.cos(Math.PI/3-a)),g=3*f-(d+c);else a<=4*Math.PI/3?(a-=2* +Math.PI/3,d=f*(1-b),g=f*(1+b*Math.cos(a)/Math.cos(Math.PI/3-a)),c=3*f-(g+d)):(a-=4*Math.PI/3,g=f*(1-b),c=f*(1+b*Math.cos(a)/Math.cos(Math.PI/3-a)),d=3*f-(g+c));return{R:d,G:g,B:c}},applyInHSI:function(a,b){for(var f=a.data,c=0,d=f.length;cg.S&&(g.S=0);g=this.HSIToRGB(g.H,g.S,g.I);f[c]=g.R;f[c+1]=g.G;f[c+2]=g.B}},applyInCoordinate:function(){},distance:function(a,b){b=b||[0,0];a=new c.C(a[0],a[1]);b=new c.C(b[0],b[1]);return a.minus(b).distance()}, +xyToIFun:function(a){return function(b,c,i){return 4*(c*a+b)+(i||0)}},xyCal:function(a,b,c,i,d){for(var g=this.xyToIFun(a.width),j=0;3>j;j++){var m=g(b,c,j);a[m]=i(a[m])}d&&(a[m+1]=d(a[m+1]))}};c.Matrix.prototype={plus:function(a){if(this.m!=a.m||this.n!=a.n)throw Error("\u77e9\u9635\u52a0\u6cd5\u884c\u5217\u4e0d\u5339\u914d");for(var b=new c.Matrix([],this.m,this.n),f=0;fk&&m.push([f,h]);b=p.lib.dorsyMath.xyToIFun(d);f=0;for(d=parseInt(d/j);fg;g++)b[f+g]=c[d+g]-c[m+g]+127.5;b[f+4]=c[f+4]}}f=0;for(i=c.length;fm;m++){var k=parseInt(2*Math.random()*a)-a;b[4*j+m]+=k}return h}}})})("psLib"); +(function(h){window[h].module("oilPainting",function(){return{process:function(h,c){for(var a=parseInt(c[0])||16,b=h.data,f=h.width,i=h.height,d=0;dk;k++)m+=b[4*j+k];m/=3;m=parseInt(m/a)*a;for(k=0;3>k;k++)b[4*j+k]=m}return h}}})})("psLib"); +(function(h){window[h].module("setHSI",function(h){return{process:function(c,a){a[0]=a[0]/180*Math.PI;a[1]=a[1]/100||0;a[2]=255*(a[2]/100)||0;a[3]=a[3]||!1;h.lib.dorsyMath.applyInHSI(c,function(b){a[3]?(b.H=a[0],b.S=a[1]):(b.H+=a[0],b.S+=a[1]);b.I+=a[2]});return c}}})})("psLib"); +(function(h){window[h].module("sharp",function(){return{process:function(h,c){for(var a=c[0]||0.6,b=h.data,f=h.width,i=0,d=b.length;im;m++)b[i+m]+=(b[i+m]-(b[j+m]+b[g+m]+b[k+m])/3)*a}return h}}})})("psLib"); +(function(h){window[h].module("toGray",function(){return{process:function(h){for(var c=h.data,a=0,b=c.length;aa?255:0);c.data=b;return c}}})})("psLib"); diff --git a/js/jquery.js b/js/jquery.js new file mode 100644 index 0000000..b1ae21d --- /dev/null +++ b/js/jquery.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/js/main_pr.js b/js/main_pr.js new file mode 100644 index 0000000..bfd96da --- /dev/null +++ b/js/main_pr.js @@ -0,0 +1,528 @@ +(function(){ + var MsgBox = function(title, msg, inhtml){ + + //初始化参数 + this.width = "500px"; + this.height = "300px"; + this.title = title; + this.msg = msg; + this.i = 0; + this.inhtml = inhtml; + + this.init = function(){ + + this.i ++; + + var html = "
"; + html += this.title; + html += "
关闭
"; + html += this.msg; + html += "
"; + html += this.inhtml; + html += "
"; + + if(this.i == 1) $(".wrapper").append(html); + else $(".commonmsgbox").replaceWith(html); + + $(".commonmsgbox").css({width:this.width,height:this.height,display:"none"}); + + var msgtop = (document.documentElement.clientHeight - parseInt($(".commonmsgbox").css("height")))/2; + var msgleft = (document.documentElement.clientWidth > 1003) ? (document.documentElement.clientWidth - parseInt($(".commonmsgbox").css("width"))) / 2 : (1003 - parseInt($(".commonmsgbox").css("width"))) / 2; + + $(".commonmsgbox").css({"top":msgtop + "px","left":msgleft + "px"}); + $(".commonmsgbox .title").css("width",$(".commonmsgbox").css("width")); + + var _this = this; + + $(".commonmsgbox .msgclose").click(function(){ + _this.hide(); + }); + }; + + this.show = function(){ + $(".commonmsgbox").slideDown("fast"); + }; + + this.hide = function(){ + this.inhtml = ""; + $(".commonmsgbox").html(""); + $(".commonmsgbox").slideUp("fast"); + }; + + this.close = this.hide; + }; + + var msg = new MsgBox("AlloyPhoto","",""); + + + + //对滑动bar的事件处理对象 + var Bar = { + observer: [], + + notify: function(target){ + var value = parseInt(target.parent().find(".dMsg").text()); + + for(var i = 0; i < this.observer.length; i ++){ + + if(target.parent().attr("id") == this.observer[i][0]){ + this.observer[i][1](value); + } + + } + }, + + addObserver: function(targetId, func){ + this.observer.push([targetId, func]); + } + }; + + var COM_MODEL = [ + "正常", "颜色减淡", "变暗", "变亮", "正片叠底", "滤色", "叠加", "强光", "差值", "排除", "点光", "颜色加深", "线性加深", "线性减淡", "柔光", "亮光", "线性光", "实色混合" + ]; + + var COM_HTML_MODEL = ""; + + //图层的命名计数 + var layerCount = 0; + var Main = { + layers: [], + + //主画布 + ps: null, + + layers: [], + + currLayer: [], + args:{}, + //+openFile + //打开文件 + openFile: function(fileUrl){ + //+0528添加 + var xmlHttpRequest = new XMLHttpRequest(); + xmlHttpRequest.open("POST", '/upload', true); + var formData = new FormData(); + // This should automatically set the file name and type. + formData.append("upload", fileUrl); + // Sending FormData automatically sets the Content-Type header to multipart/form-data + xmlHttpRequest.send(formData); + //-0528添加 + + + + + var reader = new FileReader(); + var _this = this; + + reader.readAsDataURL(fileUrl); + + reader.onload = function(){ + msg.close(); + + var img = new Image(); + img.src = this.result; + img.onload = function(){ + _this.addImage(img); + }; + + }; + + }, + //-openFile + + //+addImage + addImage: function(img){ + + var psObj = AlloyImage(img); + + if(!(this.ps)){ + this.ps = AlloyImage(parseInt(img.width),parseInt(img.height),"rgba(255,255,255,0)"); + + $(".right").css({width:img.width,height:img.height}); + $(".openFile").html("画布区"); + } + + this.layers.push(psObj); + + //添加一个图层 + this.ps.addLayer(psObj); + + //设置当前图层 + this.currLayer = [this.layers.length - 1]; + + //向面板添加一个图层 + //this.addLayer(); + this.draw(); + }, + //-addImage + + //+receiveImg + //监听 Q+ rpc传来的文件做处理 + recieveImg:function(){ + var _this = this; + /* + RpcMgr.recive( 'fdeee', function( data ){ + + if ( data.music_name === 'mm' ){ + this.notice({"msg": data.music_name + " succ"}); + }else{ + this.notice({"msg": data.music_name + " fail"}); + } + + _this.notifer = this; + var imgUrl = data.imgUrl; + + if(imgUrl){ + var img = new Image(); + img.src = imgUrl; + + img.onload = function(){ + _this.addImage(img); + }; + } + + + }); + */ + }, + //-receiveImg + + //+attachE + attachE: function () { + /* + * @description:事件处理 + * + * */ + + var _this = this; + + //上传文件处理 + $("#upFile").change(function (e) { + msg.title = "读取文件"; + msg.msg = "正在读取文件..."; + msg.inhtml = ""; + msg.init(); + msg.show(); + + _this.openFile(e.target.files[0]); + }); + //弹出模糊类型和模糊半径设置框 + $("#new").click(function () { + msg.title = "新建"; + msg.msg = "新建立一个模糊核"; + msg.inhtml="高斯模糊运动模糊
"; + msg.inhtml+="维纳滤波最小二乘方滤波
"; + + msg.inhtml += "半径:px"; + msg.init(); + msg.show(); + }); + //设置模糊类型和模糊半径 + $("#confirmNew").live("click", function () { + _this.args.mode=$("input[name='mode']:checked").val(); + _this.args.method=$("input[name='method']:checked").val(); + _this.args.radius=$("#newWidth").val(); + msg.hide(); + }); + + $("#modify").click(function () { + + $(".pItem").hide("fast"); + $("#upFile").hide(); + $(".modifyItem").css("display", "block"); + $(".back").show(); + + }); + + $("#lj").click(function () { + + + + $(".ljItem").css("display", "block"); + + + $("#upFile").hide(); + $(".back").show(); + }); + + $("#saveFile").click(function () { + var data = _this.ps.save(); + //var img = new Image(); + //img.src = data; + //$(".painting").html(img); + alert("图片已经输出成功,请右键点击图片,另存为图片即可保存"); + /* + try{ + _this.notifer.notice({"msg": data}); + }catch(e){ + alert(e.message); + } + */ + }); + + $(".ljItem").click(function () { + var text = $(this).text(); + + for (var i = 0; i < _this.currLayer.length; i++) { + _this.layers[_this.currLayer[i]].act(text); + } + + _this.draw(); + }); + + $(".back").click(function () { + $(".pItem").show("fast"); + $("#upFile").show(); + $(".subItem").hide(); + $(this).hide(); + }); + $("#modi_b").click(function () { + + msg.title = "模糊方向调节"; + msg.msg = "请滑动调节"; + msg.inhtml = "模糊方向:
0

"; + msg.inhtml += "
"; + msg.init(); + msg.show(); + + // Bar.addObserver("dBar1", function (value) { + // var value2 = parseInt($("#dBar2 .dMsg").text()); + // for (var i = 0; i < _this.currLayer.length; i++) { + // _this.layers[_this.currLayer[i]].view("亮度", value, value2); + // } + // _this.draw(); + // }); + + Bar.addObserver("dBar1", function (value) { + + _this.args.direction=value; + }); + }); + + $("#modi_HSI").click(function () { + + msg.title = "sigma调节"; + msg.msg = "请滑动调节"; + msg.inhtml = "sigma:
0

"; + msg.inhtml += "
"; + msg.init(); + msg.show(); + + Bar.addObserver("dBar2", function (value) { + _this.args.sigma=value; + + }); + }); + + + $("#excute").live("click", function () { + //加一点效果在这里比较好 + msg.hide(); + }); + + $("#cancel").live("click", function () { + + msg.hide(); + }); + + //开始处理了 + $("#processing").click(function () { + console.log(_this.args.mode); + var xmlHttpRequest = new XMLHttpRequest(); + xmlHttpRequest.open("POST", '/show', true); + xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); + xmlHttpRequest.onreadystatechange=processResponse + var formData = new FormData(); + if (_this.args.mode=="gaussian") { + strData="mode="+_this.args.mode; + strData+="&method="+_this.args.method; + strData+="&radius="+_this.args.radius; + strData+="&sigma="+_this.args.sigma; + strData+="&direction=0.0"; + + console.log(strData); + xmlHttpRequest.send(strData); + } else { + // formData.append("mode", "motion"); + // formData.append("method","wiener"); + // formData.append("radius","20"); + // formData.append("direction","-0.33"); + strData="mode="+_this.args.mode; + strData+="&method="+_this.args.method; + strData+="&radius="+_this.args.radius; + strData+="&sigma=0.0"; + strData+="&direction="+_this.args.direction; + console.log(strData); + xmlHttpRequest.send(strData); + } + //xmlHttpRequest.send(formData); + + function processResponse(){ + if(xmlHttpRequest.readyState==4){ //判断对象状态4代表完成 + if(xmlHttpRequest.status==200){ //信息已经成功返回,开始处理信息 + var strObj=eval("("+xmlHttpRequest.responseText+")"); + console.log(strObj.Dataurl) + var img=$(""); + img.attr("src","data:image/jpg;base64,"+strObj.Dataurl); + $(".painting").append(img); + $(".painting canvas").remove(); + } + } + } + + }); + + + $(".msgclose").live("click", function () { + for (var i = 0; i < _this.currLayer.length; i++) { + _this.layers[_this.currLayer[i]].cancel(); + } + + _this.draw(); + msg.hide(); + }); + + var flagM1 = 0, flagD1 = 0;//滑动bar标记 + var orginOffsetX = 0; + var clientX = 0, offsetX = 0, dTarget; + + $(".dBar a").live("mousedown", function (e) { + flagM1 = 1; + clientX = e.clientX; + offsetX = parseInt($(this).css("left")); + dTarget = $(this); + }); + + $(document).bind("mousemove", function (e) { + if (flagM1) { + + //拖拽开始 + flagD1 = 1; + var dx = e.clientX - clientX; + var currLeft = offsetX + dx; + var circleWidth = parseInt(dTarget.css("width")) / 2; + var parentWidth = parseInt(dTarget.parent().css("width")) - circleWidth; + + if (currLeft > parentWidth) currLeft = parentWidth; + if (currLeft < -circleWidth) currLeft = - circleWidth; + dTarget.css("left", currLeft + "px"); + + var rangeMin = parseFloat(dTarget.parent().attr("rangeMin")) || 0; + var rangeMax = parseFloat(dTarget.parent().attr("rangeMax")) || 0; + var percent = (currLeft + circleWidth) / parentWidth; + var nowRange = (rangeMin + (rangeMax - rangeMin) * percent).toFixed(0); + + dTarget.parent().find(".dMsg").text(nowRange); + } + }); + + + //混合模式改变时处理程序 + $(".commodel").live("change", function () { + var comModel = $(this).val(); + for (var i = 0; i < _this.currLayer.length; i++) { + _this.ps.layers[_this.currLayer[i]][1] = comModel; + } + _this.draw(); + }); + + var flagK = 0, flagM = 0, flagD = 0;//flagK 标记key alt flagM标记 Mouse flagD标记拖拽事件 + var dx = [], dy = []; + + $(document).keydown(function (e) { + if (e.keyCode == 17) { + flagK = 1; + $(".left").css("cursor", "move"); + } + }).keyup(function (e) { + if (e.keyCode == 17) { + flagK = 0; + $(".left").css("cursor", "auto"); + } + }).mouseup(function (e) { + flagM = 0; + flagM1 = 0; + if (flagD) { + _this.draw(); + flagD = 0;//标记拖拽结束 + } + if (flagD1) {//滑动bar拖拽结束 + Bar.notify(dTarget); + flagD1 = 0; + } + }); + $(".painting").get(0).onmousedown = function(e){ + var offsetX = e.offsetX ? e.offsetX : e.layerX; + var offsetY = e.offsetY ? e.offsetY : e.layerY; + + for(var i = 0;i < _this.currLayer.length;i ++){ + var lDx = _this.ps.layers[_this.currLayer[i]][2] || 0; + var lDy = _this.ps.layers[_this.currLayer[i]][3] || 0; + dx[i] = offsetX - lDx; + dy[i] = offsetY - lDy; + } + + flagM = 1; + + }; + + $(".painting").get(0).onmousemove = function(e){ + if(flagK && flagM){ + var offsetX = e.offsetX ? e.offsetX : e.layerX; + var offsetY = e.offsetY ? e.offsetY : e.layerY; + + for(var i = 0;i < _this.currLayer.length;i ++){ + _this.ps.layers[_this.currLayer[i]][2] = offsetX - dx[i]; + _this.ps.layers[_this.currLayer[i]][3] = offsetY - dy[i]; + } + _this.draw(true); + flagD = 1;//标记拖拽发生 + } + }; + + }, + //-attachE + + //+draw + draw: function(isFast){ + //显示主画布 + this.ps.show(".painting",isFast); + + //重绘直方图 + this.ps.drawRect(); + }, + //-draw + //+addLayer + addLayer: function(){ + var html = "
图层" + (++ layerCount) + " 混合模式" + COM_HTML_MODEL + "
"; + $(".layer").prepend(html); + + this.showCurrLayer(); + }, + //-addLayer + //+addInputFile + addInputFile: function(){ + var html = ""; + //$(".panel").append(html); + $("#effects").prepend(html); + }, + //-addInputFile + + //+init + init: function(){ + this.addInputFile(); + this.recieveImg(); + this.attachE(); + }, + //-init + }; + + Main.init(); + +})(); diff --git a/main.go b/main.go new file mode 100644 index 0000000..b6b60fd --- /dev/null +++ b/main.go @@ -0,0 +1,476 @@ +package main + +import ( + "bytes" + "encoding/base64" + "image" + "image/jpeg" + "log" + "net/http" + "os" + "text/template" + "fmt" + "github.com/runningwild/go-fftw/fftw" + _ "golang.org/x/image/bmp" + "image/color" + "image/png" + _"image/gif" + "math" + "encoding/json" + "strconv" +) +//Result holds the JSON RETURN +type Result struct{ + Dataurl string +} +//Pargs is form post arguments +type Pargs struct { + mode string + method string + radius int + sigma float64 + direction float64 +} +var templates = template.Must(template.ParseFiles("templates/index.html", "templates/show.html")) +//IndexHandler handle '/' deprecated +func IndexHandler(w http.ResponseWriter, r *http.Request) { + data := map[string]interface{}{"Title": "index"} + renderTemplate(w, "index", data) +} +//UploadHandler handle '/upload' +func UploadHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + http.Error(w, "Allowed POST method only", http.StatusMethodNotAllowed) + return + } + + err := r.ParseMultipartForm(32 << 20) // maxMemory + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + file, _, err := r.FormFile("upload") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer file.Close() + img, _, err := image.Decode(file) + if err!=nil{ + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + f, err := os.Create("/tmp/test.png") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer f.Close() + err=png.Encode(f,img) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + //io.Copy(f, file) + //http.Redirect(w, r, "/show", http.StatusFound) +} +//ShowHandler handle '/show' +func ShowHandler(w http.ResponseWriter, r *http.Request) { + err:=r.ParseForm() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + mode:=r.PostFormValue("mode") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + method:=r.PostFormValue("method") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + radius,err:= strconv.Atoi(r.PostFormValue("radius")) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + direction,err:= strconv.ParseFloat(r.PostFormValue("direction"),64) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sigma,err:= strconv.ParseFloat( r.PostFormValue("sigma"),64) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + pargs:=Pargs{mode,method,radius,sigma,direction} + + fmt.Println(mode,method,radius,pargs) + + file, err := os.Open("/tmp/test.png") + w.Header().Set("content-type", "application/json") + defer file.Close() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + img, _, err := image.Decode(file) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + str:=writeImageWithTemplate(w, "show", &img,&pargs) + out := &Result{str} + b, err := json.Marshal(out) + if err != nil { + return + } + w.Write(b) +} + +func renderTemplate(w http.ResponseWriter, tmpl string, data interface{}) { + if err := templates.ExecuteTemplate(w, tmpl+".html", data); err != nil { + log.Fatalln("Unable to execute template.") + } +} + +// Array2RGB 图像三原色的复数数组 +type Array2RGB [3]*fftw.Array2 + +//NewArray2RGB 产生Array2RGB +func NewArray2RGB(height, width int) Array2RGB { + var rgb Array2RGB + for i := 0; i < 3; i++ { + rgb[i] = fftw.NewArray2(height, width) + } + return rgb +} + +func initRGB(r, g, b complex128, i, j int, rgb Array2RGB) { + rgb[0].Set(i, j, r) + rgb[1].Set(i, j, g) + rgb[2].Set(i, j, b) +} + +func rgbFFT(rgb Array2RGB) Array2RGB { + var rgbfft Array2RGB + rgbfft[0] = fftw.FFT2(rgb[0]) + rgbfft[1] = fftw.FFT2(rgb[1]) + rgbfft[2] = fftw.FFT2(rgb[2]) + return rgbfft + +} + +func rgbIFFT(rgb Array2RGB) Array2RGB { + var rgbifft Array2RGB + rgbifft[0] = fftw.IFFT2(rgb[0]) + rgbifft[1] = fftw.IFFT2(rgb[1]) + rgbifft[2] = fftw.IFFT2(rgb[2]) + return rgbifft + +} + +func multiArray(c complex128, slice []complex128) []complex128 { + length := len(slice) + for i := 0; i < length; i++ { + slice[i] = slice[i] * c + } + return slice +} + +func multiArrayArr(a, b []complex128) []complex128 { + L := len(a) + if len(a) < len(b) { + + L = len(b) + } + c := make([]complex128, L) + for i := 0; i < L; i++ { + c[i] = a[i] * b[i] + } + return c +} + +func multiRGB(c []complex128, rgb Array2RGB) Array2RGB { + newRGB := NewArray2RGB(rgb[0].Dims()) + for i := 0; i < 3; i++ { + newRGB[i].Elems = multiArrayArr(c, rgb[i].Elems) + } + return newRGB +} + + +func writeImageWithTemplate(w http.ResponseWriter, tmpl string, img *image.Image,pargs *Pargs) string{ + buffer := new(bytes.Buffer) + var blur string + if pargs.mode=="gaussian" { + blur="GaussianBlur" + }else { + blur="MotionBlur" + } + var method string + if pargs.method=="wiener" { + method="Wiener" + }else { + method="LeastSquare" + } + + radius:=pargs.radius + sigma:=pargs.sigma + dire:=pargs.direction + + + ////////////////////////////////////////////////////////////////////////// + width, height := (*img).Bounds().Dx(), (*img).Bounds().Dy() + length := width * height //照片的总像素数 + + //为了和SmartDeblur一致,将(width,height)调整为(height,width) + rgb := NewArray2RGB(height, width) //Array2RGB的大小为width,height + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + q, w, e, _ := (*img).At(x, y).RGBA() //q,w,e表示rgb分量的颜色值 + initRGB(complex(float64(q>>8), 0), complex(float64(w>>8), 0), complex(float64(e>>8), 0), y, x, rgb) + } + } + + + var kernel []float64 + if blur == "GaussianBlur" { + kernel = getGaussianKernel(radius, sigma) + } else { + kernel = getMotionKernel(radius, dire) + } + /////////////////////////////////////////// + //file3,err:=os.Create("kernelMatrix.txt") + kernelMatrix := fftw.NewArray2(height, width) //模糊核 + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + + if math.Abs(float64(x-width/2)) <= float64(radius) && math.Abs(float64(y-height/2)) <= float64(radius) { + xLocal := x - (width/2 - radius) + yLocal := y - (height/2 - radius) + kernelMatrix.Set(y, x, complex(kernel[yLocal*(2*radius+1)+xLocal], 0)) + } + } + } + + KernelTempMatrix := fftw.NewArray2(height, width) + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + xTranslated := (x + width/2) % width + yTranslated := (y + height/2) % height + //kernelMatrix.Elems[y*width + x] = kernelMatrix.Elems[yTranslated*width + xTranslated] + //这样KernelMatirx会被破坏 + // if x == 0 && y == 0 { + // print(xTranslated, yTranslated, kernelMatrix.At(yTranslated, xTranslated)) + // print(xTranslated, yTranslated, kernelMatrix.Elems[yTranslated*width+xTranslated]) + // } + KernelTempMatrix.Elems[y*width+x] = kernelMatrix.Elems[yTranslated*width+xTranslated] + //fmt.Fprintf(file3,"[%d][%d]:%v ",x,y,kernelTempMatrix.At(x,y)) + } + //fmt.Fprintln(file3)//0 + } + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + kernelMatrix.Elems[y*width+x] = KernelTempMatrix.Elems[y*width+x] + } + } + + + kernelFFT := fftw.FFT2(kernelMatrix) + outTemp := fftw.NewArray2(height, width) + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + outTemp.Elems[y*width+x] = complex(real(kernelFFT.Elems[y*width+x]), real(kernelFFT.Elems[y*width+x])) + } + } + fftw.IFFT2To(outTemp, outTemp) + /// + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + index := y*width + x + if x < 11 || y < 11 || x > width-11 || y > height-11 { + realPart := real(outTemp.Elems[y*width+x]) / float64(width*height) + imagPart := imag(outTemp.Elems[y*width+x]) / float64(width*height) + complexTemp := complex(realPart, imagPart) + rgb[0].Elems[index] = complexTemp + rgb[1].Elems[index] = complexTemp + rgb[2].Elems[index] = complexTemp + } + + } + } + rgbfft := rgbFFT(rgb) + + if method == "Wiener" { + // /////////////////////////////////////////////////////////////////// + fmt.Println("维纳滤波开始") + K := 0.0007 + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + energyValue := math.Pow(real(kernelFFT.At(y, x)), 2) + math.Pow(imag(kernelFFT.At(y, x)), 2) + wienerValue := complex(real(kernelFFT.At(y, x))/(energyValue+K), 0) + rgbfft[0].Elems[y*width+x] = rgbfft[0].Elems[y*width+x] * wienerValue + rgbfft[1].Elems[y*width+x] = rgbfft[1].Elems[y*width+x] * wienerValue + rgbfft[2].Elems[y*width+x] = rgbfft[2].Elems[y*width+x] * wienerValue + } + } + fmt.Println("维纳滤波完成") + ////////////////////////////////////////////////////// + } else { + ///////////////////////////////////////////////////////////////////// + fmt.Println("最小二乘滤波开始") + laplacianMatrix := fftw.NewArray2(height, width) + laplacianMatrix.Set(0, 0, complex(4, 0)) + laplacianMatrix.Set(0, 1, complex(-1, 0)) + laplacianMatrix.Set(0, width-1, complex(-1, 0)) + laplacianMatrix.Set(1, 0, complex(-1, 0)) + laplacianMatrix.Set(height-1, 0, complex(-1, 0)) + + laplacianMatrixFFT := fftw.FFT2(laplacianMatrix) + K := 0.007 + ////////////////////////////////////////////// + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + energyValue := math.Pow(real(kernelFFT.At(y, x)), 2) + math.Pow(imag(kernelFFT.At(y, x)), 2) + energyLaplacianValue := math.Pow(real(laplacianMatrixFFT.At(y, x)), 2) + math.Pow(imag(laplacianMatrixFFT.At(y, x)), 2) + tikhonovValue := complex(real(kernelFFT.At(y, x))/(energyValue+K*energyLaplacianValue), 0) + rgbfft[0].Elems[y*width+x] = rgbfft[0].Elems[y*width+x] * tikhonovValue + rgbfft[1].Elems[y*width+x] = rgbfft[1].Elems[y*width+x] * tikhonovValue + rgbfft[2].Elems[y*width+x] = rgbfft[2].Elems[y*width+x] * tikhonovValue + } + } + fmt.Println("最小二乘滤波完成") + ////////////////////////////////////////////////////// + } + + rgbifft := rgbIFFT(rgbfft) + + file2, err := os.Create("out.png") + defer file2.Close() + if err != nil { + log.Fatal(err) + } + + rgba := image.NewRGBA((*img).Bounds()) + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + a := real(rgbifft[0].At(y, x)) / float64(length) + b := real(rgbifft[1].At(y, x)) / float64(length) + c := real(rgbifft[2].At(y, x)) / float64(length) + if a > 255 { + //print(a) + a = 255 + + } + if b > 255 { + //print(b) + b = 255 + } + if c > 255 { + //print(c) + c = 255 + } + if a < 0 { + a = 0 + } + if b < 0 { + b = 0 + } + if c < 0 { + c = 0 + } + rgba.Set(x, y, color.RGBA{ + uint8(a), //因为除以了255,导致图片不清晰,导致折腾太久,搞得我以为要四舍五入 + uint8(b), + uint8(c), + 255, + }) + + } + } + ////////////////////////////////////////////////////////////////////////// + + + + if err := jpeg.Encode(buffer, rgba, nil); err != nil { + log.Fatalln("Unable to encode image.") + } + + str := base64.StdEncoding.EncodeToString(buffer.Bytes()) + return str +} + +func main() { + http.Handle("/", http.FileServer(http.Dir("./"))) + http.HandleFunc("/upload", UploadHandler) + http.HandleFunc("/show", ShowHandler) + http.ListenAndServe(":8888", nil) +} + + +func getGaussianKernel(radius int, sigma float64) []float64 { + width := 2*radius + 1 + kernel := make([]float64, width*width) + xishu := 1.0 / (2.0 * math.Pi * sigma * sigma) + xishu2 := -1.0 / (2.0 * sigma * sigma) + for i := 0; i < width; i++ { + for j := 0; j < width; j++ { + zhishu := float64(((i-radius)*(i-radius) + (j-radius)*(j-radius))) * xishu2 + kernel[i*width+j] = xishu * math.Exp(zhishu) + } + } + var sum float64 + for i := 0; i < width*width; i++ { + sum += kernel[i] + } + for i := 0; i < width*width; i++ { + kernel[i] /= sum + } + return kernel +} + +func getMotionKernel(radius int, jiaodu float64) []float64 { + width := 2*radius + 1 + kernel := make([]float64, width*width) + //计算横纵坐标,往横纵坐标塞值 + //先用特殊情况对待45度,0度 + kernel[radius*width+radius] = 1 + //计算一四象限 + for x := 1; x <= radius; x++ { + //计算纵坐标 + y := int(float64(x) * jiaodu) + index := (x + radius) + width*(radius-y) + if index > width*width || index < 0 { + kernel[width*(radius-x)+radius] = 1 + } else { + kernel[index] = 1 + } + + } + //计算二三象限 + for x := -1; x >= -radius; x-- { + //计算纵坐标 + y := int(float64(x) * jiaodu) + index := (x + radius) + width*(radius-y) + if index > width*width || index < 0 { + kernel[width*(radius-x)+radius] = 1 + } else { + kernel[index] = 1 + } + } + var sum float64 + for i := 0; i < width*width; i++ { + sum += kernel[i] + } + for i := 0; i < width*width; i++ { + kernel[i] /= sum + } + return kernel +} \ No newline at end of file diff --git a/style/bar.style.css b/style/bar.style.css new file mode 100644 index 0000000..724b3c3 --- /dev/null +++ b/style/bar.style.css @@ -0,0 +1,19 @@ + +::-webkit-scrollbar-track-piece { + background-color:#f5f5f5; + border-left:1px solid #d2d2d2; +} +::-webkit-scrollbar { + width:13px; + height:13px; +} +::-webkit-scrollbar-thumb { + background-color:#c2c2c2; + background-clip:padding-box; + border:1px solid #979797; + min-height:28px; +} +::-webkit-scrollbar-thumb:hover { + border:1px solid #636363; + background-color:#929292; +} diff --git a/style/flash.css b/style/flash.css new file mode 100644 index 0000000..2ef2389 --- /dev/null +++ b/style/flash.css @@ -0,0 +1,19 @@ +@keyframes fly{ + 0%{ + } + 100%{ + width:0; + transform:rotateY(180deg); + } +} +@-webkit-keyframes in{ + 0%{ + } + 100%{ + -webkit-transform:scale(0.0001,0.0001); + } +} +.in{ + animation:in 0.2s ease-in; + -webkit-animation:in 0.3s 0.3s ease-in; +} diff --git a/style/image/03.gif b/style/image/03.gif new file mode 100644 index 0000000..f1f1443 Binary files /dev/null and b/style/image/03.gif differ diff --git a/style/image/back.png b/style/image/back.png new file mode 100644 index 0000000..335e56a Binary files /dev/null and b/style/image/back.png differ diff --git a/style/image/cardboard.png b/style/image/cardboard.png new file mode 100644 index 0000000..f90817e Binary files /dev/null and b/style/image/cardboard.png differ diff --git a/style/image/cardboardOld2.png b/style/image/cardboardOld2.png new file mode 100644 index 0000000..0100c84 Binary files /dev/null and b/style/image/cardboardOld2.png differ diff --git a/style/image/cardboard_old.png b/style/image/cardboard_old.png new file mode 100644 index 0000000..ff27dd8 Binary files /dev/null and b/style/image/cardboard_old.png differ diff --git a/style/image/concentric-circles.png b/style/image/concentric-circles.png new file mode 100644 index 0000000..0100c84 Binary files /dev/null and b/style/image/concentric-circles.png differ diff --git a/style/image/copy.png b/style/image/copy.png new file mode 100644 index 0000000..4f00a5c Binary files /dev/null and b/style/image/copy.png differ diff --git a/style/image/delete.png b/style/image/delete.png new file mode 100644 index 0000000..5fe2059 Binary files /dev/null and b/style/image/delete.png differ diff --git a/style/image/demo/e1.jpg b/style/image/demo/e1.jpg new file mode 100644 index 0000000..4229bde Binary files /dev/null and b/style/image/demo/e1.jpg differ diff --git a/style/image/demo/e1.png b/style/image/demo/e1.png new file mode 100644 index 0000000..31e739e Binary files /dev/null and b/style/image/demo/e1.png differ diff --git a/style/image/demo/e10.png b/style/image/demo/e10.png new file mode 100644 index 0000000..4540359 Binary files /dev/null and b/style/image/demo/e10.png differ diff --git a/style/image/demo/e11.png b/style/image/demo/e11.png new file mode 100644 index 0000000..567bba1 Binary files /dev/null and b/style/image/demo/e11.png differ diff --git a/style/image/demo/e12.png b/style/image/demo/e12.png new file mode 100644 index 0000000..01853b7 Binary files /dev/null and b/style/image/demo/e12.png differ diff --git a/style/image/demo/e13.png b/style/image/demo/e13.png new file mode 100644 index 0000000..5560ef4 Binary files /dev/null and b/style/image/demo/e13.png differ diff --git a/style/image/demo/e14.png b/style/image/demo/e14.png new file mode 100644 index 0000000..a7fbfe5 Binary files /dev/null and b/style/image/demo/e14.png differ diff --git a/style/image/demo/e2.png b/style/image/demo/e2.png new file mode 100644 index 0000000..bcae511 Binary files /dev/null and b/style/image/demo/e2.png differ diff --git a/style/image/demo/e3.png b/style/image/demo/e3.png new file mode 100644 index 0000000..1bcb7f5 Binary files /dev/null and b/style/image/demo/e3.png differ diff --git a/style/image/demo/e4.png b/style/image/demo/e4.png new file mode 100644 index 0000000..430735b Binary files /dev/null and b/style/image/demo/e4.png differ diff --git a/style/image/demo/e5.png b/style/image/demo/e5.png new file mode 100644 index 0000000..d10d06f Binary files /dev/null and b/style/image/demo/e5.png differ diff --git a/style/image/demo/e6.png b/style/image/demo/e6.png new file mode 100644 index 0000000..2870143 Binary files /dev/null and b/style/image/demo/e6.png differ diff --git a/style/image/demo/e7.png b/style/image/demo/e7.png new file mode 100644 index 0000000..478bda6 Binary files /dev/null and b/style/image/demo/e7.png differ diff --git a/style/image/demo/e8.png b/style/image/demo/e8.png new file mode 100644 index 0000000..21629c3 Binary files /dev/null and b/style/image/demo/e8.png differ diff --git a/style/image/demo/e9.png b/style/image/demo/e9.png new file mode 100644 index 0000000..04bc98a Binary files /dev/null and b/style/image/demo/e9.png differ diff --git a/style/image/down.png b/style/image/down.png new file mode 100644 index 0000000..0d8638a Binary files /dev/null and b/style/image/down.png differ diff --git a/style/image/filter.jpg b/style/image/filter.jpg new file mode 100644 index 0000000..c08624a Binary files /dev/null and b/style/image/filter.jpg differ diff --git a/style/image/lvjing.png b/style/image/lvjing.png new file mode 100644 index 0000000..bece720 Binary files /dev/null and b/style/image/lvjing.png differ diff --git a/style/image/modify.png b/style/image/modify.png new file mode 100644 index 0000000..2c1c09e Binary files /dev/null and b/style/image/modify.png differ diff --git a/style/image/mosaic-squares.png b/style/image/mosaic-squares.png new file mode 100644 index 0000000..f90817e Binary files /dev/null and b/style/image/mosaic-squares.png differ diff --git a/style/image/msgtitle.png b/style/image/msgtitle.png new file mode 100644 index 0000000..813325a Binary files /dev/null and b/style/image/msgtitle.png differ diff --git a/style/image/new.jpg b/style/image/new.jpg new file mode 100644 index 0000000..55d93d4 Binary files /dev/null and b/style/image/new.jpg differ diff --git a/style/image/open.jpg b/style/image/open.jpg new file mode 100644 index 0000000..42538ee Binary files /dev/null and b/style/image/open.jpg differ diff --git a/style/image/open_old.png b/style/image/open_old.png new file mode 100644 index 0000000..f1dd366 Binary files /dev/null and b/style/image/open_old.png differ diff --git a/style/image/save.png b/style/image/save.png new file mode 100644 index 0000000..c27fa87 Binary files /dev/null and b/style/image/save.png differ diff --git a/style/image/save_old.png b/style/image/save_old.png new file mode 100644 index 0000000..decc422 Binary files /dev/null and b/style/image/save_old.png differ diff --git a/style/image/up.png b/style/image/up.png new file mode 100644 index 0000000..09b09ec Binary files /dev/null and b/style/image/up.png differ diff --git a/style/image/wipe.jpg b/style/image/wipe.jpg new file mode 100644 index 0000000..5d62a4d Binary files /dev/null and b/style/image/wipe.jpg differ diff --git a/style/main1_pro.css b/style/main1_pro.css new file mode 100644 index 0000000..018c5cf --- /dev/null +++ b/style/main1_pro.css @@ -0,0 +1,185 @@ +img{ + vertical-align:middle; +} +.wrapper{ + margin:10px 100px; + min-width:803px; +} +.wrapper .title{ + margin-bottom:10px; + text-align:center; + color:navy; + padding:4px 0; + font-size:14px; +} +.panel{ + position:relative; + height:82px; + left:240px; +} +.pItem,.subItem{ + width:95px; + height:56px; + background:#6158d4; + text-align:center; + float:left; + margin-top:13px; + cursor:pointer; + margin-left:8px; + color:#fff; +} +.pItem img{ + margin-top:6px; + height:29px; +} +.subItem{ + display:none; +} +/*.left,.right{ + margin-top:20px; + height:430px; + background:#ecebeb; +}*/ +/*.left{ + float:left; + width:570px; + position:relative; +}*/ +.painting{ + position:absolute; + left:0; + top:0; +} +.openFile{ + font-size:25px; + margin-top:170px; + color:#ccc; + text-align:center; +} +.right{ + float:right; + text-align:center; + margin-left:10px; + width:214px; + position:relative; +} +.rect{ + height:91px; + background:#fff; +} +.layer{ + position:absolute; + bottom:0; +} +.layer .lItem{ + width:192px; + height:38px; + background:#e39ae7; + line-height:38px; + padding-left:10px; + margin:5px 6px; + color:#fff; + cursor:pointer; +} +.layer .blueStyle{ + background:blue; + border:1px solid red; +} +#upFile{ + position: absolute; + top: 196px; + left: 100px; + opacity:0; + cursor:pointer; + width:250px; + height:80px; +} +.commonmsgbox{ + width:500px; + height:300px; + position:fixed; + z-index:10; + background:#fff; + border:1px solid #ccc; +} +.commonmsgbox .title{ + background:url(image/msgtitle.png) no-repeat; + margin-top:-5px; + text-align:center; + color:#fff; + width:500px; + line-height:40px; + height:40px; +} +.commonmsgbox a{ + text-decoration:none; +} +.commonmsgbox .commonmsg{ + border-left:1px solid #ccc; + border-right:1px solid #ccc; + color:#000; +} +.commonmsgbox .msgclose{ + font-size:12px; + float:right; + margin-top:-50px; + padding-right:10px; + cursor:pointer; + color:red; +} +.commonmsgbox .commonmsg{ + padding-left:20px; + font-size:16px; + padding-top:10px; + line-height:24px; + color:navy; +} +.commonmsgbox .content{ + padding:30px; + line-height:24px; + text-align:center; +} +.edit{ + background:#ccc; + padding:6px; + margin-top:8px; +} +.eItem{ + cursor:pointer; + margin-left:4px; +} +.back{ + position:absolute; + left:-40px; + width:30px; + height:auto; + top:4px; + display:none; +} +.dBar{ + width:300px; + height:15px; + border:2px solid #ccc; + position:relative; + border-radius:10px; + margin-top:10px; + margin-bottom:10px; + display:inline-block; + vertical-align:bottom; +} +.dBar a{ + display:block; + position:absolute; + left:135px; + top:-20%; + width:20px; + height:140%; + border:1px solid #999; + border-radius:20px; + background:#999; +} +.dBar .dMsg{ + position:absolute; + right:-20px; + top:0; +} diff --git a/style/main_jianyi.css b/style/main_jianyi.css new file mode 100644 index 0000000..e15e949 --- /dev/null +++ b/style/main_jianyi.css @@ -0,0 +1,236 @@ +html,body{ + background:url(image/cardboard.png); + height:100%; + padding:0; + margin:0; + min-width:1003px; + text-shadow:0 1px 3px rgba(0, 0, 0, 0.75); + color:#fff; + font-family:Microsoft Yahei,"宋体"; + overflow:hidden; +} +li{ + list-style:none; +} +h3{ + font-weight:normal; + text-align:center; + height:30px; + line-height:30px; + font-size:16px; +} +.header{ + border-bottom:1px solid #575C62; + text-align:center; + margin:0; + height:40px; + line-height:40px; + background:#26292d; +} +.wrapper{ + /*border-top:1px solid #282B2F; + height:100%;*/ + /* + display:box; + display:-webkit-box; + display:-moz-box; + box-orient:horizontal; + -webkit-box-orient:horizontal; + */ +} +.left{ + width:250px; + border-right:1px solid #575C62; + height:100%; + overflow-y:auto; + overflow-x:hidden; + float:left; + padding:0; +} +.right{ + /* + box-flex:1; + -webkit-box-flex:1; + -moz-box-flex:1; + */ + border-left:1px solid #282B2F; + width:600px; + float:left; +} +.effects{ + border-top:1px solid #575C62; + border-bottom:1px solid #282B2F; + padding:0; +} +.effects li{ + margin-left:0; + border-top:1px solid #282B2F; + border-bottom:1px solid #575C62; + list-style:none; + transition:all ease-in .2s; + -webkit-transition:all ease-in .2s; + height:80px; + overflow:hidden; +} +.imgWrapper{ + margin:0px; + margin-left:15px; + padding:0; + line-height:80px; + border-top-left-radius:10px; + border-bottom-left-radius:10px; + width:250px; + transition:all ease-in .2s; + -webkit-transition:all ease-in .2s; + position:relative; + height:80px; + cursor:pointer; +} +.imgWrapper img{ + margin:0; + width:100px; + height:60px; + left:0; + top:10px; + position:absolute; + border:none; + border-radius:10px; + z-index:3; + cursor:pointer; +} +#infoMsg{ + position:absolute; + top:170px; + left:450px; + z-index:9; + width:100px; + height:100px; + text-align:center; + line-height:100px; + background:#333; + border-radius:4px; + opacity:0.7; + display:none; + color:#ccc; +} +.imgWrapper{ + width:250px; + padding-left:110px; +} +.imgWrapper img:hover{ + box-shadow:0 0 10px #52cca0; + -webkit-box-shadow:0 0 10px #52cca0; + -moz-box-shadow:0 0 10px #52cca0; +} + +.effects li:hover{ + background:#5344c3; +} +.picWrapper{ + position:relative; + width:100%; + height:500px; +} +.pic{ + position:absolute; + left:0; + top:0; + 2box-shadow:6px 6px 3px #333; + 2-webkit-box-shadow:6px 6px 3px #333; +} +.command{ + background:#27282b; + background:-webkit-gradient(linear,left top,left bottom,from(#26292d),color-stop(50%,#27282b),to(#26292d)); + height:100px; + border-top:1px solid #565555; + border-bottom:1px solid #565555; + position:fixed; + bottom:0; + width:100%; + z-index:10; +} +.demoImg{ + float:left; + margin-right:20px; +} +.demoImg li{ + list-style:none; + display:inline-block; + margin-left:10px; + vertical-align:middle; + text-align:center; +} +.d_item{ + width:80px; + height:90px; + overflow:hidden; + position:relative; +} +.d_item img{ + width:80px; + height:auto; + border:3px solid rgb(45,45,45); +} +.lab{ + position:absolute; + bottom:0; + width:100%; + text-align:center; + padding-bottom:10px; + font-size:12px; +} +.footer{ + float:right; + margin-right:20px; + margin-top:50px; + font-size:12px; + text-align:right; +} +.footer a{ + text-decoration:none; + color:#fff; +} +.footer a:hover{ + text-decoration:underline; +} +/* + * botton' + * */ +a.button{ + text-decoration:none; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + background: #E0B324; + + background: -moz-linear-gradient(0% 45% 90deg,#E0B324, #FAD121, #FFE678 100%); + + background: -webkit-gradient(linear, 0% 0%, 0% 65%, from(#FFE678), to(#E0B324), color-stop(.2,#FAD121)); + + color:#312f30; + float:left; + font-family:arial,helvetica,sans-serif; + font-size:17px; + font-weight:bold; + padding:10px 20px; + text-shadow:1px 1px 0 #ebd663; +} + +a.button:hover{ + background: #D4A922; + background: -moz-linear-gradient(40% 51% 90deg,#D4A922, #EBC41F, #EDD670 100%); + background: -webkit-gradient(linear, 0% 0%, 0% 65%, from(#EDD670), to(#D4A922), color-stop(.2,#EBC41F)); +} + +.command_items{ + float:left; + margin-top:20px; + margin-left:0; + padding:0; +} +#open{ + display:none; +} +.d_item{ + cursor:pointer; +} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..599d49e --- /dev/null +++ b/templates/index.html @@ -0,0 +1,13 @@ + + + + + {{ .Title |html }} + + +
+ + +
+ + diff --git a/templates/show.html b/templates/show.html new file mode 100644 index 0000000..743611d --- /dev/null +++ b/templates/show.html @@ -0,0 +1,12 @@ + + + + + {{ .Title |html }} + + +

received image:
+ +

+ +