0

我正在使用 Extendscript for Photoshop CS5 来更改文本图层的文本。有没有办法检查文本是否适合,例如通过检查它是否在更改内容后溢出?

4

2 回答 2

3

我创建了一个完美的解决方案:)。也许其他人也可以使用它。让我知道它是否也适合你!

function scaleTextToFitBox(textLayer) {     
    var fitInsideBoxDimensions = getLayerDimensions(textLayer);

    while(fitInsideBoxDimensions.height < getRealTextLayerDimensions(textLayer).height) {
        var fontSize = parseInt(textLayer.textItem.size);
        textLayer.textItem.size = new UnitValue(fontSize * 0.95, "px");
    }
}

function getRealTextLayerDimensions(textLayer) {
    var textLayerCopy = textLayer.duplicate(activeDocument, ElementPlacement.INSIDE);

    textLayerCopy.textItem.height = activeDocument.height;
    textLayerCopy.rasterize(RasterizeType.TEXTCONTENTS);

    var dimensions = getLayerDimensions(textLayerCopy);
    textLayerCopy.remove();

    return dimensions;
}

function getLayerDimensions(layer) {
    return { 
        width: layer.bounds[2] - layer.bounds[0],
        height: layer.bounds[3] - layer.bounds[1]
    };
}

使用方法/说明

  1. 创建具有已定义宽度和高度的文本图层。
  2. 您可以更改文本图层的内容,然后调用scaleTextToFitBox(textLayer);

该函数将更改文本/字体大小,直到文本适合框内(因此没有文本是不可见的)!

该脚本每一步将字体大小减小 5% (* 0.95),直到文本适合框内。您可以更改乘数以获得更精确的结果或提高性能。

于 2016-07-25T14:23:57.557 回答
1

我还没有找到直接执行此操作的方法。但是我之前使用过以下技术来确定文本框所需的高度(我想保持宽度不变)。

  • 扩展文本框的高度远远超出容纳其中文本所需的高度。
  • 复制图层
  • 栅格化副本
  • 测量栅格化层的边界。
  • 根据需要调整原始文本图层的边界
  • 删除光栅化的重复项

完全迂回 - 但它确实有效。

于 2015-03-08T03:15:16.853 回答