Đây là macro Javascript bắt buộc của tôi để sao chép các lớp từ tài liệu Photoshop này sang tài liệu khác cho bất kỳ ai quen thuộc với kịch bản Photoshop. Đã thử và thử nghiệm trong CS 5.5 trên mac.
sourceDocumentName
, targetDocumentName
Và layersToCopy
là các biến duy nhất bạn cần phải chỉnh sửa yêu cầu của bạn.
Trên máy Mac, bạn chỉ có thể lưu dưới dạng một cái gì đó như thế copyLayersBetweenDocs.jsx
, sau đó kéo-thả tệp tập lệnh vào biểu tượng Photoshop trong thanh công cụ để chạy. Trên Windows, bạn phải lưu nó trong thư mục scripts C:\Program Files\Common Files\Adobe\Startup Scripts CS5\Adobe Photoshop
và mở nó từ Photoshop
#target photoshop
app.bringToFront();
var sourceDocumentName = 'source-doc';
var targetDocumentName = 'target-doc';
// populate this array with whatever the names of the layers
// you want to copy are
var layersToCopy = new Array(
'road-scenery',
'car',
'wheels',
'front-passenger',
'rear-passenger'
);
// alternatively, specify the name of a layer group containing
// the layers you want to copy over.
// Just uncomment the following line
//var layersToCopy = 'layer-group-to-copy';
copyLayers( layersToCopy, sourceDocumentName, targetDocumentName );
/**
* Copy layer from one document to another
* @param {string|Array} layersToCopy
* @param {string} sourceDocumentName
* @param {string} targetDocumentName
*/
function copyLayers( layersToCopy, sourceDocumentName, targetDocumentName ) {
var
sourceLayer,
targetLayer,
sourceGroup;
var sourceDoc = app.documents[sourceDocumentName];
var targetDoc = app.documents[targetDocumentName];
if ( app.activeDocument != sourceDoc ) {
app.activeDocument = sourceDoc;
}
if ( typeof layersToCopy === 'string' ) {
sourceGroup = sourceDoc.layerSets.getByName( layersToCopy );
targetLayer = sourceGroup.duplicate( targetDoc, ElementPlacement.PLACEATBEGINNING )
}
else if ( Object.prototype.toString.call( layersToCopy ) === '[object Array]' ) {
for ( var i = 0; i < layersToCopy.length; i++ ) {
sourceLayer = sourceDoc.artLayers.getByName( layersToCopy[i] );
targetLayer = sourceLayer.duplicate( targetDoc, ElementPlacement.PLACEATBEGINNING );
}
}
}