关于使用 ps脚本来处理图片的排层问题
问题是这样,在三维软件 把模型切割,给切割的部件排上序号 如 :tianji_1-431_bujian13.png
中间一段数据就是表示的 1.431 该数据之后 会到ps总排层使用
在ps排层出三维渲染数据 只要是二次处理图像
之后在到flash中条动画 该数据 用来在flash中排层
但是ps 对部件排层使用了 1.431 :tianji_1-431_bujian13.png 字典方法,
时候对 1.431 进行sort 但是 是使用数据交换 界面不断刷新太卡
使用的方法是该文件图层有序的输出到另一个文档中 ,
之前使用的代码是 :
///利用现有脚本功能 /// 对名称进行排序 建立字典 使用层级移动完成 //$.level = 1 //该函数完成对层级名称收集 function getLayerName () { var doc =activeDocument //app.documents[1] // 一般使用这个 是当前激活的层级关系 很重要 var clayer = doc.layers.length var newname = new Array () for (var i = 0 ; i< clayer ; i ++){ temname = doc.layers[i].name newname.push (temname) } return newname } // 该方法是对现有层级名称使用分隔符号分成名称转成数组数组 // 里面是 字符串数子 不转换为了后面字典方便 function getLayernum () { var newNum = new Array() var conLayerNames = getLayerName() var i = 0 for (i ; i<conLayerNames.length; i++){ try{ var cic = conLayerNames[i].split("_") var cicnum = cic[1].split("-") newNum.push ((cicnum[0] +"."+cicnum[1])) }catch(e) { newNum.push (i+"") // 出了问题给个假序号 } } return newNum } // 该方法主要是对 getLayernum 字符串形式 转成float 进行排序 function getLayernumfloat (){ var coc = getLayernum() var tem = new Array () for (var i=0 ; i <coc.length ; i ++){ var ffl = parseFloat (coc [i]) tem.push (ffl) } return tem } // 只要是测试 // //只要是创建字典 getLayernum 位键 getLayerName 是value // 要处理的键 value 一定是相等的 里面是一个 key value 数组 function CreateDit () { var keys = getLayernum() // 字符串处理 var values = getLayerName() // 层级的名称 var conoob = new Array () // 用于收集对象 // 这样的表示方法就是一个字典 // 可以循环出来键 通过键访问value for (var i = 0 ; i <keys.length ; i ++){ conoob[keys[i]] = values[i] } return conoob } /* 建立好后字典数组 下来是对 提取数字排序 // 现在提前分享排序应该是从大道小 l = a.sort(function compare(a,b){return -(a-b);}); 实现反向处理 var tes = CreateDit() // 激活设置 var cii= app.documents[1] var cc = app.activeDocument = cii // 通过名称找到层 var d = "tianji_1-109_bujian31.png" var c = app.activeDocument.layers[d] alert (c.name) */ //这里只要是实现对图层排列操作 function engineStart (){ var docCull =activeDocument //当前的文档折后用于切换文档使用 var h = docCull.height var w = docCull.width var connum = getLayernumfloat() // 转换好的float 数组 var endSort = connum.sort(function compare(a,b){return (a-b);}); // 这里面就是正确的排除 var tes = CreateDit() // 建立字典 // alert(endSort) // 在这里新建文档 var newdoc = app.documents.add( w, h , 72) for (var i = 0 ; i < endSort.length; i++) { var layerRef= newdoc.layers[0] app.activeDocument =docCull var strFloat = endSort[i]+"" // 用于当做字典的键 var pngImagelayer =tes[strFloat] // 这里是层的名称 // 选择层 var c = docCull.layers[pngImagelayer] docCull.activeLayer = c c.duplicate (layerRef , ElementPlacement.PLACEBEFORE) //docCull.flatten() /* docCull.selection.selectAll(true) docCull.selection.copy() app.activeDocument =newdoc newdoc.paste() */ /* 使用从新建立文档思路 */ //alert(pngImagelayer) //var layerObj = app.activeDocument.layers[pngImagelayer]// 层的对象 //var layerObjAfter = app.activeDocument.layers[pngImagelayerAfter]// 层的对象 //layerObj.moveAfter (layerObjAfter ) // layerObj.move (layerObjAfter,ElementPlacement.PLACEAFTER) } }// end engineStart()
docCull.selection.selectAll(true)
docCull.selection.copy()
app.activeDocument =newdoc
newdoc.paste()
发现从当前层拷贝到另一个文档的图层 会出现资源始终在中心位置
后来使用了 duplicate
这个是赋值图层他的好处是 目录可以放到任意打开的文档
c.duplicate (layerRef , ElementPlacement.PLACEBEFORE)
完美接口 排层问题