2013-10-27 37 views
1

我一直在Google上搜索,找到一种方法将转换为智能对象中心的图层与由脚本编写的画布对齐,但迄今尚未找到解决方案。我结束了下面的代码,但它没有完成这项工作。任何人都可以帮忙吗?如何将智能对象图层中心对齐到画布?

var baseFile = new File(openDialog()); //open base JPEG file 
var workFile = new File(openDialog()); //open work JPEG file 
var baseDoc = app.open(baseFile); 
var workDoc = app.open(workFile); 

createSO(workDoc.layers[0]); 
workDoc.resizeImage(280,280); 
workDoc.artLayers[0].duplicate(baseDoc, ElementPlacement.INSIDE); 
app.activeDocument = baseDoc; 

var Hoffset = (baseDoc.width - workDoc.width)/2; 
var Voffset = (baseDoc.height - workDoc.height)/2; 
baseDoc.layers[1].position = Array(Hoffset, Voffset); 

function createSO(){ 
    var doc = app.activeDocument; 
    var idnewPlacedLayer = stringIDToTypeID("newPlacedLayer"); 
    executeAction(idnewPlacedLayer, undefined, DialogModes.NO); 
    return doc.activeLayer; 
} 

回答

0

我认为你可以用这种方式简化了一下:

var baseFile = new File(openDialog()); //open base JPEG file 
var workFile = new File(openDialog()); //open work JPEG file 
var baseDoc = app.open(baseFile); 
var workDoc = app.open(workFile, undefined, true); 

workDoc.resizeImage(280, 280); 
var duplicated = workDoc.artLayers[0].duplicate(baseDoc, ElementPlacement.INSIDE); 
var Hoffset = (baseDoc.width - workDoc.width)/2; 
var Voffset = (baseDoc.height - workDoc.height)/2; 

app.activeDocument = baseDoc; 

duplicated.translate(Hoffset, Voffset); 

,这里的要点是使用translate方法;但也可以使用app.open(即asSmartObject)的第三个参数来避免创建createSO函数。