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 Dialogs
和 Suppress 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 脚本:更改文本图层的文本的主要内容,如果未能解决你的问题,请参考以下文章