( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ
#target photoshop
app.bringToFront();var originalDoc,appVersion=1.9,cs2=parseInt(app.version)<10;try{originalDoc=app.activeDocument}catch(e){}var progress,cancel,errors,history,defaultSettings={ignoreHiddenLayers:!1,ignoreBackground:!0,writeTemplate:!1,writeJson:!0,trimWhitespace:!0,scale:1,padding:1,imagesDir:"./brandexport/assets/",jsonPath:"./brandexport/json/"},settings=loadSettings();function checkTextValues(){var e=[];collectLayers(activeDocument,e);for(var t=e.length,n=0;n<t;n++)determinelayerkind(e[n])}function run(){var e=new Object;e.countFrom=1,e.zeroPadding=3,e.nameSeparator=" ",e.topToBottom=!1,renameLayers(activeDocument,e),errors=[],showProgressDialog();var t=new File(jsonPath(settings.jsonPath));t.parent.create();var n=absolutePath(settings.imagesDir);new Folder(n).create();var a=rulerOrigin(),r=a[0],i=a[1];activeDocument.duplicate(),deselectLayers();try{convertToRGB()}catch(e){}if(app.activeDocument.mode==DocumentMode.RGB){if(settings.writeTemplate){1!=settings.scale&&(storeHistory(),scaleImage());var o=Math.floor(1e3*Math.random()),s=_=new File(n+"template"+o+".jpg");_.exists&&_.remove(),saveJPG(_),1!=settings.scale&&restoreHistory()}if(settings.jsonPath||settings.imagesDir){rasterizeAll(),activeDocument.artLayers.add();var l=[];collectLayers(activeDocument,l);var d=l.length;activeDocument.artLayers.add();var c={_root:{name:"brandStart",x:0,y:0,children:[]}},u={},g=0,p={_default:[]},h=0,m=0;e:for(var y=0;y<d;y++){if(cancel)return;if((K=l[y]).kind==LayerKind.NORMAL||isGroup(K)){var v=stripTags(K.name).replace(/.png$/,"");if(!(v=(v=v.replace(/[\\\/:"*?<>|]/g,"").replace(/^\.+$/,"").replace(/^__drag$/,"")).replace(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,""))||v.length>255)error("Layer name is not a valid attachment name:\n\n"+K.name);else{var f=folders(K,"");K.attachmentName=f+v,K.attachmentPath=f+(findTagValue(K,"path:")||v);var b=null,L=findTagLayer(K,"category");if(L){var T=getParentBone(L,c);if(b=get(c,O=findTagValue(L,"category"))){if(T!=b.parent){error('Multiple layers for the "'+O+'" bone have different parent bones:\n\n'+b.parent.name+"\n"+T.name);continue}}else set(c,O,b={name:O,parent:T,children:[]}),T.children.push(b);b.x=K.bounds[0].as("px")*settings.scale-settings.padding,b.x+=(K.bounds[2].as("px")-K.bounds[0].as("px"))*settings.scale/2+settings.padding,b.y=(activeDocument.height.as("px")-K.bounds[1].as("px"))*settings.scale+settings.padding,b.y-=(K.bounds[3].as("px")-K.bounds[1].as("px"))*settings.scale/2+settings.padding,b.x-=r*settings.scale,b.y-=(activeDocument.height.as("px")-i)*settings.scale}K.slotName=findTagValue(K,"brandLayer")||K.attachmentName,get(u,K.slotName)||g++,set(u,K.slotName,E={bone:b,attachment:K.wasVisible?K.attachmentName:null}),K.blendMode==BlendMode.LINEARDODGE?E.blend="additive":K.blendMode==BlendMode.MULTIPLY?E.blend="multiply":K.blendMode==BlendMode.SCREEN&&(E.blend="screen"),(G=get(p,B=findTagValue(K,"brandLayerOrder")||"default"))||(set(p,B,G={}),h++),(W=get(G,K.slotName))||set(G,K.slotName,W=[]);for(var D=0,k=W.length;D<k;D++)if(W[D].attachmentName==K.attachmentName){error('Multiple layers for the "'+B+'" skin have the same name:\n\n'+K.attachmentName+"\n\nRename or use the [path:name] or [ignore] tag for these layers.");continue e}W[W.length]=K,m++}}}var x=errors.length;if(x){var w=errors[0];if(x>1)try{var I="";for(y=0;y<x;y++)y>0&&(I+="---\n"),I+=errors[y].replace(/\n\n/g,"\n")+"\n";(_=new File(t.parent+"/errors.txt")).parent.create(),_.encoding="UTF-8",_.remove(),_.open("w","TEXT"),_.lineFeed="\n",_.write(I),_.close(),w+=2==x?"\n\nSee errors.txt for 1 additional error.":"\n\nSee errors.txt for "+(x-1)+" additional errors."}catch(e){w+=2==x?"\n\nUnable to write 1 additional error to errors.text.\n"+e:"\n\nUnable to write "+(x-1)+" additional errors to errors.txt.\n"+e}return alert(w),void(_&&_.execute())}var S='{ \n "brandEngine": { \n';for(var O in S+='"brandLocation": \n { \n "images": "'+n+'" \n },\n',S+=' "categorys": \n \n',c){if(cancel)return;if(c.hasOwnProperty(O))(b=c[O]).parent||(S+=se(b))}S+=' \n \n ,\n"brandLayers": \n [ \n';var P=0;for(var N in u){if(cancel)return;if(u.hasOwnProperty(N)){var E=u[N];if(N=stripName(N),K.kind==LayerKind.TEXT)var C="yes";else C="no";S+='\t{ \n "name": '+quote(N)+', \n "style": '+quote(C)+', \n "category": '+quote(E.bone?E.bone.name:"brandStart"),E.attachment&&(S+=', \n "attachment": '+quote(E.attachment)),E.blend&&(S+=', "blend": '+quote(E.blend)),S+=" \n } \n ",S+=++P<g?",\n":"\n"}}S+=' ] ,\n \n "brandLayerOrders": \n {\n';var R=0,A=0;for(var B in p)if(p.hasOwnProperty(B)){var G=p[B];S+='\t"'+(B=stripName(B))+'": {\n';var M=0,V=countAssocArray(G);for(var N in G)if(G.hasOwnProperty(N)){b=u[N].bone;var W=G[N];S+="\t\t"+quote(N=stripName(N))+": {\n";var j=0,H=W.length;for(y=H-1;y>=0;y--){var K;if((K=W[y]).visible=!0,cancel)return;setProgress(++A/m,trim(K.name));var F=K.attachmentName,U=F,z=K.attachmentPath;"default"!=B&&(U=B+"/"+U,z=B+"/"+z),isGroup(K)&&(activeDocument.activeLayer=K,K=K.merge()),rasterizeStyles(K),storeHistory();var q=0,J=0;settings.trimWhitespace&&(q=activeDocument.width.as("px")*settings.scale,J=activeDocument.height.as("px")*settings.scale,K.isBackgroundLayer||activeDocument.trim(TrimType.TRANSPARENT,!1,!0,!0,!1),q-=activeDocument.width.as("px")*settings.scale,J-=activeDocument.height.as("px")*settings.scale,K.isBackgroundLayer||activeDocument.trim(TrimType.TRANSPARENT,!0,!1,!1,!0));var _,X=activeDocument.width.as("px")*settings.scale+2*settings.padding,$=activeDocument.height.as("px")*settings.scale+2*settings.padding;if(settings.imagesDir)1!=settings.scale&&scaleImage(),settings.padding>0&&activeDocument.resizeCanvas(X,$,AnchorPosition.MIDDLECENTER),(_=new File(n+z+".png")).parent.create(),savePNG(_);restoreHistory(),A<m&&deleteLayer(K),q+=Math.round(X)/2-settings.padding,J+=Math.round($)/2-settings.padding,q-=r,J-=activeDocument.height.as("px")-i,b&&(q-=b.x,J-=b.y),S+="\t\t\t"+quote(F)+": { ",U!=F&&(S+='"name": '+quote(U)+", "),U!=z&&(S+='"path": '+quote(z)+", "),S+='"x": '+q+', "y": '+J+', "width": '+Math.round(X)+', "height": '+Math.round($),S+=" }"+(++j<H?",\n":"\n")}S+="\t\t}"+(++M<V?",\n":"\n")}S+="\t}"+(++R<=h?",\n":"\n")}if(S+="}\n ",activeDocument.close(SaveOptions.DONOTSAVECHANGES),settings.writeJson&&settings.jsonPath){if(cancel)return;t.encoding="UTF-8",t.remove(),t.open("w","TEXT"),t.lineFeed="\n";var Y=[];collectLayers(activeDocument,Y);var Z=Y.length;S+=', \n "brandType": \n [ ';for(var Q=0;Q<Z;Q++){var ee=Y[Q],te=determinelayerkind(ee),ne=ee.bounds[0].value,ae=ee.bounds[1].value;if("Text Layer"==te)var re=ee.textItem.size,ie=ee.textItem.font,oe=ee.textItem.color.rgb.hexValue;else re="",ie="",oe="";S+=' \n{ \n "color": "'+oe+'" ,\n "x": "'+ne+'" ,\n "y": "'+ae+'" ,\n "face": "'+ie+'" ,\n "size": "'+re+'" ,\n "id": "'+Q+'" , \n "type": "'+te+'" \n} ,\n'}S+=' \n{ \n "color": "'+s+'" ,\n "x": "0" ,\n "y": "0" ,\n "face": "'+s+'" ,\n "size": "'+s+'", \n "id": "-'+s+'" , \n "type": "poster" \n } \n ] \n }\n',S+="\n } ",t.write(S),t.close()}}}else alert("update PSD image mode to RGB color.");function se(e){var t=e.parent?",\n":"";t+='\t{ "name": '+quote(e.name);var n=e.x,a=e.y;e.parent&&(n-=e.parent.x,a-=e.parent.y,t+=', "parent": '+quote(e.parent.name)),n&&(t+=', "x": '+n),a&&(t+=', "y": '+a),t+=" }";for(var r=0,i=e.children.length;r<i;r++)t+=se(e.children[r]);return t}}function showSettingsDialog(){if(parseInt(app.version)<9)alert("Photoshop CS2 or later is required.");else if(originalDoc){try{decodeURI(activeDocument.path)}catch(e){return void alert("Please save the document before running the The Brand Tool.")}var e,t=new Window("dialog","The Brand v"+appVersion),n=(a=t.graphics).newBrush(a.BrushType.SOLID_COLOR,[.99,.99,.99,1]);a.backgroundColor=n,t.title=t.add("statictext",void 0,"The Brand Exporter");var a=t.title.graphics;a.font=ScriptUI.newFont("Georgia","BOLDITALIC",22),t.p1=t.add("panel",void 0,void 0,{borderStyle:"black"}),t.alignChildren="fill";try{t.add("image",void 0,new File(scriptDir()+"logo.png"))}catch(e){}var r=t.add("panel",void 0,"Settings");r.margins=[10,15,10,10],r.alignChildren="fill";var i=r.add("group");i.alignChildren=["left",""],i.orientation="row",(e=i.add("group")).orientation="column",e.alignChildren=["left",""];var o=e.add("checkbox",void 0," Ignore hidden layers");o.value=settings.ignoreHiddenLayers;var s=e.add("checkbox",void 0," Ignore background layer");s.value=settings.ignoreBackground;var l=e.add("checkbox",void 0," Trim whitespace");l.value=settings.trimWhitespace,(e=i.add("group")).orientation="column",e.alignChildren=["left",""],e.alignment=["","top"];var d=e.add("checkbox",void 0," Write Brand JSON");d.value=settings.writeJson;var c,u,g,p,h=e.add("checkbox",void 0," Write template image");if(h.value=settings.writeTemplate,cs2)(e=r.add("group")).add("statictext",void 0,"Scale:"),(c=e.add("edittext",void 0,100*settings.scale)).preferredSize.width=50,g=r.add("slider",void 0,100*settings.scale,1,100),(e=r.add("group")).add("statictext",void 0,"Padding:"),(u=e.add("edittext",void 0,settings.padding)).preferredSize.width=50,p=r.add("slider",void 0,settings.padding,0,4);else{var m=r.add("group");(e=m.add("group")).orientation="column",e.alignChildren=["right",""],e.add("statictext",void 0,"Scale:"),e.add("statictext",void 0,"Padding:"),(e=m.add("group")).orientation="column",(c=e.add("edittext",void 0,100*settings.scale)).characters=4,(u=e.add("edittext",void 0,settings.padding)).characters=4,(e=m.add("group")).orientation="column",e.add("statictext",void 0,"%"),e.add("statictext",void 0,"px"),(e=m.add("group")).orientation="column",e.alignChildren=["fill",""],e.alignment=["fill",""],g=e.add("slider",void 0,100*settings.scale,1,100),p=e.add("slider",void 0,settings.padding,0,4)}var y,v,f,b,L=t.add("panel",void 0,"Output Paths");if(L.alignChildren=["fill",""],L.margins=[10,15,10,10],cs2)L.add("statictext",void 0,"Images:"),(y=L.add("edittext",void 0,settings.imagesDir)).alignment="fill",L.add("statictext",void 0,"JSON:"),(f=L.add("edittext",void 0,settings.jsonPath)).alignment="fill";else{var T=L.add("group");T.orientation="column",T.alignChildren=["fill",""],(e=T.add("group")).add("statictext",void 0,"Images:"),(y=e.add("edittext",void 0,settings.imagesDir)).alignment=["fill",""],(v=T.add("statictext",void 0,"")).maximumSize.width=260;var D=(e=T.add("group")).add("statictext",void 0,"JSON:");D.justify="right",D.minimumSize.width=41,(f=e.add("edittext",void 0,settings.jsonPath)).alignment=["fill",""],(b=T.add("statictext",void 0,"")).maximumSize.width=260}var k,x=t.add("group");cs2||(k=x.add("button",void 0,"Help")),(e=x.add("group")).alignment=["fill",""],e.alignChildren=["right",""];var w=e.add("button",void 0,"OK"),I=e.add("button",void 0,"Cancel");h.helpTip="When checked, a PNG is written for the currently visible layers.",d.helpTip="When checked, a Brand JSON file is written.",l.helpTip="When checked, blank pixels aroind the edges of each image are removed.",g.helpTip="Scales the PNG files. Useful when using higher resolution art in Photoshop than in Brand.",p.helpTip="Blank pixels around the edge of each image. Can avoid aliasing artifacts for opaque pixels along the image edge.",y.helpTip='The folder to write PNGs. Begin with "./" to be relative to the PSD file. Blank to disable writing PNGs.',f.helpTip='Output JSON file if ending with ".json", else the folder to write the JSON file. Begin with "./" to be relative to the PSD file. Blank to disable writing a JSON file.',c.onChanging=function(){g.value=c.text},g.onChanging=function(){c.text=Math.round(g.value)},u.onChanging=function(){p.value=u.text},p.onChanging=function(){u.text=Math.round(p.value)},I.onClick=function(){cancel=!0,t.close()},cs2||(k.onClick=showHelpDialog),f.onChanging=function(){var e=f.text?jsonPath(f.text):"<no JSON output>";cs2?f.helpTip=e:(b.text=e,b.helpTip=e)},y.onChanging=function(){var e=y.text?absolutePath(y.text):"<no image output>";cs2?y.helpTip=e:(v.text=e,v.helpTip=e)},f.onChanging(),y.onChanging(),w.onClick=function(){if(c.text<=0||c.text>100)alert("Scale must be between > 0 and <= 100.");else if(u.text<0)alert("Padding must be >= 0.");else{!function(){settings.ignoreHiddenLayers=o.value,settings.ignoreBackground=s.value,settings.writeTemplate=h.value,settings.writeJson=d.value,settings.trimWhitespace=l.value;var e=parseFloat(c.text);e>0&&e<=100&&(settings.scale=e/100),settings.imagesDir=y.text,settings.jsonPath=f.text;var t=parseInt(u.text);t>=0&&(settings.padding=t)}(),saveSettings(),o.enabled=!1,s.enabled=!1,h.enabled=!1,d.enabled=!1,l.enabled=!1,c.enabled=!1,g.enabled=!1,u.enabled=!1,p.enabled=!1,y.enabled=!1,f.enabled=!1,cs2||(k.enabled=!1),w.enabled=!1,I.enabled=!1;var e=app.preferences.rulerUnits;app.preferences.rulerUnits=Units.PIXELS;try{run()}catch(e){alert("An unexpected error has occurred.Files were saved but JSON not generated successfully")}finally{activeDocument!=originalDoc&&activeDocument.close(SaveOptions.DONOTSAVECHANGES),app.preferences.rulerUnits=e,t.close()}}},t.center(),t.show()}else alert("Please open a document before running the The Brand Tool.")}function loadSettings(){var e=null;try{e=app.getCustomOptions(sID("settings"))}catch(e){}var t={};for(var n in defaultSettings)if(defaultSettings.hasOwnProperty(n)){var a=sID(n);e&&e.hasKey(a)?t[n]=e["get"+getOptionType(defaultSettings[n])](a):t[n]=defaultSettings[n]}return t}function saveSettings(){if(!cs2){var e=new ActionDescriptor;for(var t in defaultSettings)defaultSettings.hasOwnProperty(t)&&e["put"+getOptionType(defaultSettings[t])](sID(t),settings[t]);app.putCustomOptions(sID("settings"),e,!0)}}function getOptionType(e){switch(typeof e){case"boolean":return"Boolean";case"string":return"String";case"number":return"Double"}throw new Error("Invalid default setting: "+e)}function showHelpDialog(){var e=new Window("dialog","The Brand - Help");e.alignChildren=["fill",""],e.orientation="column",e.alignment=["","top"],e.add("statictext",void 0,'This script writes layers as images and creates a JSON file to bring the images into Brand with the same positions and draw order they had in Photoshop.\n\nThe Photoshop ruler origin corresponds to 0,0 in Brand.\n\nTags in square brackets can be used anywhere in layer and group names to customize the output. If ":name" is omitted, the layer or group name is used.\n\nGroup and layer names:\n• [bone] or [bone:name] Layers, slots, and bones are placed under a bone. The bone is created at the center of a visible layer. Bone groups can be nested.\n• [slot] or [slot:name] Layers are placed in a slot.\n• [skin] or [skin:name] Layers are placed in a skin. Skin layer images are output in a subfolder for the skin.\n• [folder] or [folder:name] Layers images are output in a subfolder. Folder groups can be nested.\n• [ignore] Layers, groups, and any child groups will not be output.\n\nGroup names:\n• [merge] Layers in the group are merged and a single image is output.\n\nLayer names:\n• [path:name] Specifies the image file name, which can be different from the attachment name. Whitespace trimming is required. Can be used on a group with [merge].',{multiline:!0}).preferredSize.width=325;var t=e.add("button",void 0,"Close");t.alignment=["center",""],t.onClick=function(){e.close()},e.center(),e.show()}function showProgressDialog(){var e=new Window("palette","The Brand - Processing...");e.alignChildren="fill",e.orientation="column";var t=e.add("statictext",void 0,"Initializing..."),n=e.add("group"),a=n.add("progressbar");a.preferredSize=[300,16],a.maxvalue=1e4;var r=n.add("button",void 0,"Cancel");r.onClick=function(){cancel=!0,r.enabled=!1},e.center(),e.show(),e.active=!0,progress={dialog:e,bar:a,message:t}}function setProgress(e,t){progress.bar.value=1e4*e,progress.message.text="Layer: "+t,progress.dialog.active||(progress.dialog.active=!0)}function unlock(e){if(e.allLocked&&(e.allLocked=!1),e.layers)for(var t=e.layers.length-1;t>=0;t--)unlock(e.layers[t])}function deleteLayer(e){unlock(e),activeDocument.activeLayer=activeDocument.artLayers[0],e.remove()}function collectLayers(e,t){e:for(var n=e.layers.length-1;n>=0;n--){if(cancel)return;var a=e.layers[n];if(!settings.ignoreHiddenLayers||a.visible)if(settings.ignoreBackground&&a.isBackgroundLayer)deleteLayer(a);else if(findTagLayer(a,"ignore"))deleteLayer(a);else{var r=isGroup(a);if(r||0!=a.bounds[2]||0!=a.bounds[3]){for(var i=/\[([^\]]+)\]/g;;){var o=i.exec(a.name);if(!o)break;var s=o[1].toLowerCase();if(r){if(!isValidGroupTag(s)){var l="Invalid group name:\n\n"+a.name;isValidLayerTag(s)?l+="\n\nThe ["+s+"] tag is only valid for layers, not for groups.":l+="\n\nThe ["+s+"] tag is not a valid tag.",error(l);continue e}}else if(!isValidLayerTag(s)){l="Invalid layer name:\n\n"+a.name;isValidGroupTag(s)?l+="\n\nThe ["+s+"] tag is only valid for groups, not for layers.":l+="\n\nThe ["+s+"] tag is not a valid tag.",error(l);continue e}}if(settings.trimWhitespace||-1==a.name.search(/\[path:[^\]]+\]/i,"")){var d=a.kind==LayerKind.NORMAL||r;if(d&&(a.wasVisible=a.visible,a.visible=!0,a.allLocked&&(a.allLocked=!1)),r&&findTagLayer(a,"merge")){if(collectGroupMerge(a),!a.layers||0==a.layers.length)continue}else{if(a.layers&&a.layers.length>0){collectLayers(a,t);continue}if(r)continue}d&&(a.visible=!1),t.push(a)}else error("The [path:name] tag requires whitespace trimming to be enabled:\n"+a.name)}else deleteLayer(a)}}}function collectGroupMerge(e){if(e.layers)for(var t=e.layers.length-1;t>=0;t--){var n=e.layers[t];settings.ignoreHiddenLayers&&!n.visible||(findTagLayer(n,"ignore")?deleteLayer(n):collectGroupMerge(n))}}function isValidGroupTag(e){return isValidLayerTag(e)||"merge"==e}function isValidLayerTag(e){switch(e){case"category":case"brandLayer":case"brandLayerOrder":case"folder":case"ignore":return!0}return!!startsWith(e,"category:")||(!!startsWith(e,"brandLayer:")||(!!startsWith(e,"brandLayerOrder:")||(!!startsWith(e,"folder:")||!!startsWith(e,"path:"))))}function isGroup(e){return"LayerSet"==e.typename}function stripTags(e){return trim(e.replace(/\[[^\]]+\]/g,""))}function findTagLayer(e,t){var n=isValidGroupTag(t),a=isValidLayerTag(t);endsWith(t,":")&&(t=t.slice(0,-1));for(var r=new RegExp("\\["+t+"(:[^\\]]+)?\\]","i");e;){var i=isGroup(e);if((i&&n||!i&&a)&&r.exec(e.name))return e;e=e.parent}return null}function findTagValue(e,t){if(!(e=findTagLayer(e,t)))return null;endsWith(t,":")&&(t=t.slice(0,-1));var n=new RegExp("\\["+t+":([^\\]]+)\\]","i").exec(e.name);return n&&n.length?trim(n[1]):stripTags(e.name)}function getParentBone(e,t){var n=findTagValue(e.parent,"category")||"brandStart",a=get(t,n);if(!a){var r=getParentBone(e.parent,t);set(t,n,a={name:n,parent:r,children:[],x:0,y:0}),r.children.push(a)}return a}function jsonPath(e){if(endsWith(e,".json")){var t=e.replace(/\\/g,"/").lastIndexOf("/");return-1!=t?absolutePath(e.slice(0,t+1))+e.slice(t+1):absolutePath("./")+e}var n=decodeURI(originalDoc.name);return absolutePath(e)+n.substring(0,n.indexOf("."))+".json"}function folders(e,t){var n=findTagLayer(e,"folder");return n?folders(n.parent,findTagValue(n,"folder")+"/"+t):t}function error(e){errors.push(e)}function get(e,t){return e["_"+t]}function set(e,t,n){e["_"+t]=n}function stripName(e){return e.substring(1)}function rulerOrigin(){var e=new ActionReference;e.putEnumerated(cID("Dcmn"),cID("Ordn"),cID("Trgt"));var t=executeActionGet(e);return[t.getInteger(sID("rulerOriginH"))>>16,t.getInteger(sID("rulerOriginV"))>>16]}function rasterizeAll(){try{executeAction(sID("rasterizeAll"),void 0,DialogModes.NO)}catch(e){}}function rasterizeStyles(e){try{activeDocument.activeLayer=e;var t=new ActionDescriptor,n=new ActionReference;n.putEnumerated(cID("Lyr "),cID("Ordn"),cID("Trgt")),t.putReference(cID("null"),n),t.putEnumerated(cID("What"),sID("rasterizeItem"),sID("layerStyle")),executeAction(sID("rasterizeLayer"),t,DialogModes.NO)}catch(e){}}function scaleImage(){var e=activeDocument.width.as("px")*settings.scale;activeDocument.resizeImage(UnitValue(e,"px"),null,null,ResampleMethod.BICUBICSHARPER)}function storeHistory(){history=activeDocument.activeHistoryState}function restoreHistory(){activeDocument.activeHistoryState=history}function scriptDir(){var e;if(cs2)try{THROW_ERROR}catch(t){e=t.fileName}else e=$.fileName;return new File(e).parent+"/"}function absolutePath(e){if(!startsWith(e=trim(e),"./")){var t=decodeURI(new File(e).absoluteURI);if(!startsWith(t,decodeURI(new File("child").parent.absoluteURI)))return t+"/";e="./"+e}return 0==e.length?e=decodeURI(activeDocument.path):startsWith(settings.imagesDir,"./")&&(e=decodeURI(activeDocument.path)+e.substring(1)),"/"!=(e=(e=new File(e).fsName.toString()).replace(/\\/g,"/")).substring(e.length-1)&&(e+="/"),e}function cID(e){return charIDToTypeID(e)}function sID(e){return stringIDToTypeID(e)}function bgColor(e,t,n,a){e.graphics.backgroundColor=e.graphics.newBrush(e.graphics.BrushType.SOLID_COLOR,[t,n,a])}function deselectLayers(){var e=new ActionDescriptor,t=new ActionReference;t.putEnumerated(cID("Lyr "),cID("Ordn"),cID("Trgt")),e.putReference(cID("null"),t),executeAction(sID("selectNoLayers"),e,DialogModes.NO)}function convertToRGB(){var e=new ActionDescriptor;e.putClass(cID("T "),cID("RGBM")),e.putBoolean(cID("Mrge"),!1),e.putBoolean(cID("Rstr"),!0),executeAction(cID("CnvM"),e,DialogModes.NO)}function savePNG(e){var t=new PNGSaveOptions;t.compression=6,activeDocument.saveAs(e,t,!0,Extension.LOWERCASE)}function saveJPG(e){var t=new JPEGSaveOptions;t.quality=12,t.embedColorProfile=!0,t.formatOptions=FormatOptions.PROGRESSIVE,t.formatOptions==FormatOptions.PROGRESSIVE&&(t.scans=5),t.matte=MatteType.NONE,activeDocument.saveAs(e,t,!0,Extension.LOWERCASE)}function countAssocArray(e){var t=0;for(var n in e)e.hasOwnProperty(n)&&t++;return t}function trim(e){return e.replace(/^\s+|\s+$/g,"")}function startsWith(e,t){return 0===e.indexOf(t)}function endsWith(e,t){return-1!==e.indexOf(t,e.length-t.length)}function quote(e){return'"'+e.replace(/"/g,'\\"')+'"'}function renameLayers(e,t){var n=e.layers.length;if(t.topToBottom)for(var a=0;a<n;a++)r();else for(a=n-1;a>=0;a--)r();function r(){var n=e.layers[a],r=n.visible,i="thebrand"+Math.floor(100*Math.random());"LayerSet"==n.typename?renameLayers(n,t):(n.name=n.name.concat(i),n.name=n.name.replace(" ","_"),n.name=n.name.replace("@","_"),n.name=n.name.replace("(",""),n.name=n.name.replace(")",""),r||(n.visible=!1),t.countFrom++)}}function determinelayerkind(e){return e.kind==LayerKind.TEXT?(layerkind="Text Layer",layerkind):e.kind==LayerKind.SOLIDFILL?(layerkind="Shape Layer",layerkind):e.kind==LayerKind.BLACKANDWHITE?(layerkind="Black and White adjustment layer",layerkind):e.kind==LayerKind.BRIGHTNESSCONTRAST?(layerkind="Brightness contrast adjustment layer",layerkind):e.kind==LayerKind.CHANNELMIXER?(layerkind="Channel mixer adjustment layer",layerkind):e.kind==LayerKind.COLORBALANCE?(layerkind="Color balance adjustment layer",layerkind):e.kind==LayerKind.CURVES?(layerkind="Curves adjustment layer",layerkind):e.kind==LayerKind.EXPOSURE?(layerkind="Exposure layer",layerkind):e.kind==LayerKind.GRADIENTFILL?(layerkind="Gradient fill",layerkind):e.kind==LayerKind.GRADIENTMAP?(layerkind="Gradient map adjustment layer",layerkind):e.kind==LayerKind.HUESATURATION?(layerkind="Hue saturation adjustment layer",layerkind):e.kind==LayerKind.INVERSION?(layerkind="Invert adjustment layer",layerkind):e.kind==LayerKind.LAYER3D?(layerkind="3D layer",layerkind):e.kind==LayerKind.LEVELS?(layerkind="Levels adjustment layer",layerkind):e.kind==LayerKind.NORMAL?(layerkind="Normal layer",layerkind):e.kind==LayerKind.PATTERNFILL?(layerkind="Pattern fill layer",layerkind):e.kind==LayerKind.PHOTOFILTER?(layerkind="Photo filter layer",layerkind):e.kind==LayerKind.POSTERIZE?(layerkind="Posterize adjustment layer",layerkind):e.kind==LayerKind.SELECTIVECOLOR?(layerkind="Selective color adjustment layer.",layerkind):e.kind==LayerKind.SMARTOBJECT?(layerkind="Smart object layer",layerkind):e.kind==LayerKind.THRESHOLD?(layerkind="Threshold adjustment layer",layerkind):e.kind==LayerKind.VIBRANCE?(layerkind="Vibrance layer",layerkind):e.kind==LayerKind.VIDEO?(layerkind="Video layer",layerkind):void 0}showSettingsDialog();