我正在使用 Extendscript for Photoshop CS5 来更改文本图层的文本。有没有办法检查文本是否适合,例如通过检查它是否在更改内容后溢出?
问问题
1059 次
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]
};
}
使用方法/说明
- 创建具有已定义宽度和高度的文本图层。
- 您可以更改文本图层的内容,然后调用
scaleTextToFitBox(textLayer);
该函数将更改文本/字体大小,直到文本适合框内(因此没有文本是不可见的)!
该脚本每一步将字体大小减小 5% (* 0.95),直到文本适合框内。您可以更改乘数以获得更精确的结果或提高性能。
于 2016-07-25T14:23:57.557 回答
1
我还没有找到直接执行此操作的方法。但是我之前使用过以下技术来确定文本框所需的高度(我想保持宽度不变)。
- 扩展文本框的高度远远超出容纳其中文本所需的高度。
- 复制图层
- 栅格化副本
- 测量栅格化层的边界。
- 根据需要调整原始文本图层的边界
- 删除光栅化的重复项
完全迂回 - 但它确实有效。
于 2015-03-08T03:15:16.853 回答