Photoshop 脚本:更改文本图层的文本

Posted

技术标签:

【中文标题】Photoshop 脚本:更改文本图层的文本【英文标题】:Photoshop scripting: changing text of a text layer 【发布时间】:2013-01-12 07:42:29 【问题描述】:

因为我没有足够的时间来学习所有关于 PS 脚本的知识,所以我想知道您是否可以帮助我。

这很简单。我想要一个 JS 脚本,它可以改变 Top Layer 的文本。 例如:文本是“#005”,脚本应该加1,所以它说“#006”。 之后,它应该使用当前编号 (006) 导出(保存为 Web 和设备 w. 透明度 @ 1280x720)。

这是图层的屏幕(omg 是德语!!11):imageshack.us/photo/my-images/706/helpal.png

【问题讨论】:

1) 导出是什么意思? “另存为”还是“保存”? 2)这是(#num)文本层中唯一的内容吗? 3)那是最顶层吗? 4) 是否有包含此文本图层的父文件夹?图层调色板的屏幕截图会有很大帮助。 如果“@ 1280x720”部分指示的大小与文件的原始大小不同,则脚本将为此需要一些额外的内容。请注意,PHS 脚本需要准确详细信息。 @inhan 1280x720 是图片的原始尺寸。是的,我可能也使用Save as,但这只是一个选项,如果导出更复杂的话。 我已经编辑了我的答案。你为什么不检查一下? 已经做了,只是想说一下;)非常感谢! 【参考方案1】:

为反对者编辑:

,为了帮助社区并避免误导/错误信息(如果我在这种情况下提出任何信息),从而使 *** 成为一个更好的地方,请在下面添加评论,说明您的想法代码或方向值得投反对票。如果有任何错误或误导,我会再学习一件事,对此我将不胜感激。

首先你需要创建一个动作。

    使用.jsx 扩展名保存以下代码。 打开您拥有的其中一张图片 创建一个新操作,如果面板下方的录制按钮尚未激活,请按该按钮 转到File > Scripts > Browse 并选择该脚本 停止动作记录 转到创建文件的文件夹并删除该新文件

那么您将需要自动化所有这些。 没有打开的文档

    转到File > Automate > Batch 从选项中选择必要的“Set”和“Action”名称 对于“源”,保持选中“文件夹”,然后通过单击“选择...”按钮选择包含分层文件的文件夹 这可能不是必需的(取决于您的颜色设置),但您可以选择第 3 和第 4 个选项:Suppress File Open Options DialogsSuppress Color Profile Warnings。由于在录制时您没有包括打开文件的操作,因此请保持第一个选项Override Action Open Commands 未选中。否则它不会打开任何文件,但它仍然会尝试执行脚本 * 文件数。如有必要,请选择第二个选项 Include All Subfolders。 点击“确定”按钮。

对于那些使用 CS6 的人来说还有一点: Adobe Developer Connection 表示……

Adobe Photoshop CS6 不安装 Scripting 文件夹。请使用以下链接手动安装 Samples、Documentation 和 Scripting Listener 插件。

function getTextLayer(target) 
// this basically loops all the layers to find the
// upmost text layer with the content #nn... and returns it
    if (target == null) return false;
    var layers      = target.layers,
        layerLen    = layers.length;
    for (var i = 0; i < layerLen; i++) 
        var layer       = layers[i],
            isLayerSet  = layer.typename == 'LayerSet',
            isValid     = layer.kind == LayerKind.TEXT &&
                          /^\s*#\d+\s*$/.test(layer.textItem.contents);
            // we're allowing spaces around the text just in case
        if (!isLayerSet && !isValid) continue;
        if (isLayerSet) 
            var found = getTextLayer(layer);
            if (found) return found;
         else return layer;
    
    return false;


var doc;
try 
    doc = app.activeDocument;
    // the front document
 catch(e) 
var txtLayer = getTextLayer(doc);
// obviously, the text layer if found

if (txtLayer) 
    var num = txtLayer.textItem.contents.match(/\d+/)[0],
    // find the numeric part
        len = num.length,
    // find the length of the numeric part
        num = (parseInt(num,10)+1).toString();
    // add 1 to that number
    while (num.length < len) num = '0' + num;
    // and adjust length if necessary so that e.g.
    // 032 will not become 33 but it will become 033
    txtLayer.textItem.contents = '#' + num;
    // update layer content
    var ext = '.png',
        dir = decodeURI(doc.path) + '/png24',
        // to use the same directory where the layered file exists
        // just keep it as decodeURI(doc.path)
        // I added a folder here, which actually does not exist
        // but it doesn't matter because I'm making it create it
        // below in case there's no such directory.
        fileName = dir + '/' + num + ext,
        i = 0;
    if (!Folder(dir).exists) Folder(dir).create();
    // create the directory if it doesn't exist
    while (File(fileName).exists)
        fileName = dir + '/' + num + '-' + (++i) + ext;
    // if file with that name exists, add -n to the end of the name
    var file = new File(fileName),
        opts = new ExportOptionsSaveForWeb();
    with (opts) 
        format = SaveDocumentType.PNG;
        PNG8 = false;
    
    doc.exportDocument(file, ExportType.SAVEFORWEB, opts);
    // save for web

if (doc) 
    doc.close(SaveOptions.DONOTSAVECHANGES);
    // close the original layered document without saving

doc = null;
// remove reference

【讨论】:

所以,我使用的是 CS5 Extended,我希望脚本将文件导出(保存为 Web 和设备...)文件为具有透明度 @ 1280x720px 的 PNG-24。应该编辑的文本层是顶层,它的唯一内容是例如#005 没有文件夹,只有 3 层,这是一个屏幕:imageshack.us/photo/my-images/706/helpal.png @KristofNadler 更新了答案。 嗨,韩!我尝试了几次,但它似乎不起作用。 许多行有助于进入 Photoshop 脚本!谢谢! 您可以使用内置的var txtLayer = doc.layers.getByName('#032'); 方法,而不是声明大的getTextLayer 函数(它搜索具有给定名称的层——此处为“#032”)。

以上是关于Photoshop 脚本:更改文本图层的文本的主要内容,如果未能解决你的问题,请参考以下文章

编辑文本图层 - Photoshop 脚本

获取文本图层阴影参数(ExtendScript CS5、Photoshop 脚本)

更改文本画布大小

通过 Photoshop 中的脚本更改特定文本的字体

将图层名称复制到 Photoshop 中的文本框的脚本

Ae:文本图层操作基础