问题描述
使用Photoshop 2017,我将文本图层拆分为单词:
使用以下脚本:
psd = app.activeDocument;
layer = psd.activeLayer;
var text = layer.textItem.contents;
var textArray = text.split(" ");
var lngth = textArray.length+1;
for (var w=1; w<lngth;w++){
wordlayer = layer.duplicate();
wordlayer.name = textArray[w-1];
wordlayer.textItem.contents = textArray[w-1];
psd.activeLayer = wordlayer;
}
哪个会产生以下结果:
正如您所知,我遇到的问题是定位。是否可以获取每个单词的原始坐标,以便我可以适当地定位每个文本层?
另一种可能的方法:我考虑过按原样复制每个图层,并将其他单词的颜色透明度更改为0%。我发现最接近的问题是这个 [ExtendScript]Change font color,size of certain word in text layer,但是即使这样做确实可行,仍然无法为单个单词设置alpha /透明度。
解决方法
您需要考虑前导(文本行中的垂直空间)和原始字体大小。这是您修改后的脚本。
// Switch off any dialog boxes
displayDialogs = DialogModes.NO; // OFF
psd = app.activeDocument;
layer = psd.activeLayer;
var text = layer.textItem.contents;
var textArray = text.split(" ");
var lngth = textArray.length+1;
for (var w=1; w<lngth;w++)
{
wordlayer = layer.duplicate();
wordlayer.name = textArray[w-1];
wordlayer.textItem.contents = textArray[w-1];
psd.activeLayer = wordlayer;
var fontsize = wordlayer.textItem.size;
var leading = wordlayer.textItem.leading;
//alert("fontsize: " + fontsize + "\nleading: " + leading);
translate(0,leading*(w-1));
}
// Switch off any dialog boxes
displayDialogs = DialogModes.ALL; // OFF
function translate(x,y)
{
// =======================================================
var idTrnf = charIDToTypeID( "Trnf" );
var desc179 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref38 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref38.putEnumerated( idLyr,idOrdn,idTrgt );
desc179.putReference( idnull,ref38 );
var idFTcs = charIDToTypeID( "FTcs" );
var idQCSt = charIDToTypeID( "QCSt" );
var idQcsa = charIDToTypeID( "Qcsa" );
desc179.putEnumerated( idFTcs,idQCSt,idQcsa );
var idOfst = charIDToTypeID( "Ofst" );
var desc180 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc180.putUnitDouble( idHrzn,idPxl,x ); // x
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc180.putUnitDouble( idVrtc,y ); // y
var idOfst = charIDToTypeID( "Ofst" );
desc179.putObject( idOfst,idOfst,desc180 );
var idIntr = charIDToTypeID( "Intr" );
var idIntp = charIDToTypeID( "Intp" );
var idbicubicAutomatic = stringIDToTypeID( "bicubicAutomatic" );
desc179.putEnumerated( idIntr,idIntp,idbicubicAutomatic );
executeAction( idTrnf,desc179,DialogModes.NO );
}
在创建textArray
时,您可能需要考虑单词之间的间距以及换行符。