ExtendScript:如何检查文本内容是否溢出包含矩形

Extendscript: How to check whether text content overflows the containing rectangle

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

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

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

完全迂回 - 但确实有效。

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

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);

该函数将更改 text/font 大小,直到文本适合框(这样就没有文本是不可见的)!

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