因为我没有足够的时间去学习所有关于PS-Scripting的知识,所以我想知道是否可以帮助我。
非常简单。我想要一个JS脚本,它可以更改顶部图层的文本。
例如:文本是"#005",脚本应该加1,这样就会显示"#006"。
然后,它应该使用当前数字(006)导出(保存为Web和设备w.透明度@ 1280x720)文件。
以下是图层的屏幕截图(天哪,它是德语!11):imageshack.us/photo/my-images/706/helpal.png
针对投票者的编辑说明:
请出于帮助社区和避免误导/错误信息(如果我在这种情况下犯了任何错误)从而使StackOverflow成为一个更好的地方,添加下面的评论,说明您认为代码或指示值得投票反对的原因。如果有任何错误或误导性的内容,我将学到更多东西,对此我将感激不尽。
首先,您需要创建一个操作。
.jsx
扩展名保存以下代码。文件 > 脚本 > 浏览
,然后选择该脚本然后,您需要自动化所有操作。没有打开的文档,
文件 > 自动化 > 批处理
抑制文件打开选项对话框
和抑制颜色配置文件警告
。由于在录制时您未包括打开文件的操作,因此保持第1个选项覆盖操作打开命令
未选中。否则,它将不会打开任何文件,但仍然会尝试执行脚本*您的文件数量。如果需要,请选择第2个选项包括所有子文件夹
。对于那些使用CS6的人的额外说明:Adobe Developer Connection指出...
Adobe Photoshop CS6不安装Scripting文件夹。请使用以下链接手动安装示例、文档和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
getTextLayer
函数,您可以使用内置的var txtLayer = doc.layers.getByName('#032');
方法(它会搜索具有给定名称的图层--这里是“#032”)。 - romainsalles