码迷,mamicode.com
首页 > 其他好文 > 详细

关于使用 ps脚本来处理图片的排层问题

时间:2014-05-26 08:46:11      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:c   class   blog   code   tar   a   

问题是这样,在三维软件 把模型切割,给切割的部件排上序号 如 :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

关于使用 ps脚本来处理图片的排层问题

标签:c   class   blog   code   tar   a   

原文地址:http://www.cnblogs.com/gaitian00/p/3747383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!