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]
};
}
使用方法/说明
- 创建一个具有已定义宽度和高度的文本层。
- 您可以更改文本层内容,然后调用
scaleTextToFitBox(textLayer);
该函数将更改 text/font 大小,直到文本适合框(这样就没有文本是不可见的)!
脚本每一步将字体大小减小 5% (* 0.95),直到文本适合框内。您可以更改乘数以获得更精确的结果或提高性能。
我正在使用 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]
};
}
使用方法/说明
- 创建一个具有已定义宽度和高度的文本层。
- 您可以更改文本层内容,然后调用
scaleTextToFitBox(textLayer);
该函数将更改 text/font 大小,直到文本适合框(这样就没有文本是不可见的)!
脚本每一步将字体大小减小 5% (* 0.95),直到文本适合框内。您可以更改乘数以获得更精确的结果或提高性能。