问题是这样,在三维软件 把模型切割,给切割的部件排上序号 如 :tianji_1-431_bujian13.png
中间一段数据就是表示的 1.431 该数据之后 会到ps总排层使用
在ps排层出三维渲染数据 只要是二次处理图像
之后在到flash中条动画 该数据 用来在flash中排层
但是ps 对部件排层使用了 1.431 :tianji_1-431_bujian13.png 字典方法,
时候对 1.431 进行sort 但是 是使用数据交换 界面不断刷新太卡
使用的方法是该文件图层有序的输出到另一个文档中 ,
之前使用的代码是 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 |
///利用现有脚本功能 /// 对名称进行排序 建立字典 使用层级移动完成 //$.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)
完美接口 排层问题
关于使用 ps脚本来处理图片的排层问题,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/gaitian00/p/3747383.html