拆分文字后间距会变大

功能建议 · 75 次浏览
Homjie 创建于 2024-09-29 20:13

逐行逐字拆分后间距变大,有时候只是移动一部分文字,有大部分需要保留,间隙变大不太好,

请问可以保持住原来的间距吗?


Anlv 2024-09-30 11:57 :

由于不同字体之间字符的间距不是固定的,所以没有办法获取到参数(官方API也没有查询到如何获取文本图层的单独位置属性);


之前尝试过的两种解决方案

  • 一种是拆分后根据原图层的宽度,在拆分后根据宽度进行分布。但由于字体间距问题,会存在轻微的偏移,例如 i 和 o 的宽度就不相同。
  • 另一种是进行栅格化后进行像素拆分,但是这样文本就是去了可编辑性。

Anlv 最后更新于 2024-09-30 11:58
Homjie 回复 Anlv 2024-10-01 17:38 :

这个可以,忘记从哪里搞来的了,这个会有轻微的偏移,但是基本动的幅度不大
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("所选图层非文字图层,请重新选择");
}

Anlv 回复 Homjie 2024-10-12 14:23 :

这是第一种方案,根据原图层的高度或宽度,分割数/高度或宽度,所以会发生偏移;像是非等宽字符给强制进行等宽处理了。

我刚调试了一下,在拆分行的情况下是按照默认的行距(1.2x)处理的。所以理论上只要文本图层没经过自由变换缩放就能够正确在原来的位置进行分割。

Anlv 最后更新于 2024-10-12 14:26
回复内容
暂无回复
回复主贴