逐行逐字拆分后间距变大,有时候只是移动一部分文字,有大部分需要保留,间隙变大不太好,
请问可以保持住原来的间距吗?
由于不同字体之间字符的间距不是固定的,所以没有办法获取到参数(官方API也没有查询到如何获取文本图层的单独位置属性);
之前尝试过的两种解决方案
这个可以,忘记从哪里搞来的了,这个会有轻微的偏移,但是基本动的幅度不大var currentLayer = app.activeDocument.activeLayer; var initialLayer = currentLayer; if(currentLayer.kind == LayerKind.TEXT){ //判断是否为文字图层 var textitem = currentLayer.textItem; if(textitem.contents==""){ //判断文字图层是否为空 alert("所选文字图层无内容,请先输入任意文字"); } else { if(currentLayer.textItem.kind==TextType.PARAGRAPHTEXT){ //检测是否时段落文字图层,是的话就转换成点文字。 currentLayer.textItem.kind = TextType.POINTTEXT; } var bounds = initialLayer.bounds; //获取图层的边界范围 var width = bounds[2].value - bounds[0].value; //获取图层的宽度 var height = bounds[3].value - bounds[1].value; //获取图层的高度 if(textitem.contents.indexOf("\r") != -1){ //indexOf函数,如果没出现\r回车返回-1,出现了则返回值不等于-1 ,多行打散单行处理 var wordArry = currentLayer.textItem.contents.split('\r'); for(var i=0;i<wordArry.length;i++){ var newLayer = currentLayer.duplicate(); currentLayer = newLayer; currentLayer.textItem.contents = wordArry[i]; if(i!=0){ currentLayer.translate(0,height/wordArry.length); } } } else{ //单行打散单字 var wordArry = currentLayer.textItem.contents.split(""); for(var i=0;i<wordArry.length;i++){ var newLayer = currentLayer.duplicate(); currentLayer = newLayer; currentLayer.textItem.contents = wordArry[i]; if(i!=0){ currentLayer.translate(width/wordArry.length,0); } } } } } else { alert("所选图层非文字图层,请重新选择"); }
这是第一种方案,根据原图层的高度或宽度,分割数/高度或宽度,所以会发生偏移;像是非等宽字符给强制进行等宽处理了。
我刚调试了一下,在拆分行的情况下是按照默认的行距(1.2x)处理的。所以理论上只要文本图层没经过自由变换缩放就能够正确在原来的位置进行分割。
由于不同字体之间字符的间距不是固定的,所以没有办法获取到参数(官方API也没有查询到如何获取文本图层的单独位置属性);
之前尝试过的两种解决方案
这个可以,忘记从哪里搞来的了,这个会有轻微的偏移,但是基本动的幅度不大
var currentLayer = app.activeDocument.activeLayer;
var initialLayer = currentLayer;
if(currentLayer.kind == LayerKind.TEXT){ //判断是否为文字图层
var textitem = currentLayer.textItem;
if(textitem.contents==""){ //判断文字图层是否为空
alert("所选文字图层无内容,请先输入任意文字");
}
else {
if(currentLayer.textItem.kind==TextType.PARAGRAPHTEXT){ //检测是否时段落文字图层,是的话就转换成点文字。
currentLayer.textItem.kind = TextType.POINTTEXT;
}
var bounds = initialLayer.bounds; //获取图层的边界范围
var width = bounds[2].value - bounds[0].value; //获取图层的宽度
var height = bounds[3].value - bounds[1].value; //获取图层的高度
if(textitem.contents.indexOf("\r") != -1){ //indexOf函数,如果没出现\r回车返回-1,出现了则返回值不等于-1 ,多行打散单行处理
var wordArry = currentLayer.textItem.contents.split('\r');
for(var i=0;i<wordArry.length;i++){
var newLayer = currentLayer.duplicate();
currentLayer = newLayer;
currentLayer.textItem.contents = wordArry[i];
if(i!=0){
currentLayer.translate(0,height/wordArry.length);
}
}
}
else{ //单行打散单字
var wordArry = currentLayer.textItem.contents.split("");
for(var i=0;i<wordArry.length;i++){
var newLayer = currentLayer.duplicate();
currentLayer = newLayer;
currentLayer.textItem.contents = wordArry[i];
if(i!=0){
currentLayer.translate(width/wordArry.length,0);
}
}
}
}
}
else {
alert("所选图层非文字图层,请重新选择");
}
这是第一种方案,根据原图层的高度或宽度,分割数/高度或宽度,所以会发生偏移;像是非等宽字符给强制进行等宽处理了。
我刚调试了一下,在拆分行的情况下是按照默认的行距(1.2x)处理的。所以理论上只要文本图层没经过自由变换缩放就能够正确在原来的位置进行分割。