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

时间:2015-03-06 14:07:17

标签: extendscript photoshop-script photoshop-cs5

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

2 个答案:

答案 0 :(得分:1)

我还没有找到直接做到这一点的方法。但我之前使用以下技术来确定文本框所需的高度(我希望保持宽度不变)。

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

完全迂回 - 但确实有效。

答案 1 :(得分:1)

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

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);
  3. 该函数将更改文本/字体大小,直到文本放在框内(这样就不会看到任何文本)!

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