如何通过 Photoshop JavaScript 将文本写入文本文件?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6477026/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to write text to a text file by Photoshop JavaScript?
提问by torus
I took a look at Photoshop CS5 Scripting Guide and Photoshop CS5 JavaScript Reference, but I couldn't find out a method to write text to a plain text file. Is there any way to do that?
我查看了Photoshop CS5 Scripting Guide 和 Photoshop CS5 JavaScript Reference,但找不到将文本写入纯文本文件的方法。有没有办法做到这一点?
I want to record the value of bounds
of each layer object in a document.
我想记录bounds
文档中每个图层对象的值。
Any hint?
任何提示?
采纳答案by nobody
File system access is documented in Adobe's JavaScript Tools Guide (PDF).
文件系统访问记录在 Adobe 的JavaScript 工具指南 (PDF) 中。
Download the PDF file and check out the "File System Access" section.
下载 PDF 文件并查看“文件系统访问”部分。
回答by psycho brm
This works for me, saves text with the same name as original document, but with extension txt
:
这对我有用,保存与原始文档同名的文本,但带有扩展名txt
:
function saveTxt(txt)
{
var Name = app.activeDocument.name.replace(/\.[^\.]+$/, '');
var Ext = decodeURI(app.activeDocument.name).replace(/^.*\./,'');
if (Ext.toLowerCase() != 'psd')
return;
var Path = app.activeDocument.path;
var saveFile = File(Path + "/" + Name +".txt");
if(saveFile.exists)
saveFile.remove();
saveFile.encoding = "UTF8";
saveFile.open("e", "TEXT", "????");
saveFile.writeln(txt);
saveFile.close();
}
I don't know how it works, photoshop scripting is a huge mess, I just kept mixing together a few scripts that I found until it worked.
我不知道它是如何工作的,photoshop 脚本编写是一团糟,我只是不断地将我发现的一些脚本混合在一起,直到它起作用为止。
Also, if anyone needs this, here is a script that also saves active document as png
image:
此外,如果有人需要这个,这里有一个脚本,它也将活动文档保存为png
图像:
function savePng()
{
var Name = app.activeDocument.name.replace(/\.[^\.]+$/, '');
var Ext = decodeURI(app.activeDocument.name).replace(/^.*\./,'');
if (Ext.toLowerCase() != 'psd')
return;
var Path = app.activeDocument.path;
var saveFile = File(Path + "/" + Name +".png");
if(saveFile.exists)
saveFile.remove();
var o = new ExportOptionsSaveForWeb();
o.format = SaveDocumentType.PNG;
o.PNG8 = false;
o.transparency = true;
o.interlaced = false;
o.includeProfile = false;
activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, o);
}
回答by Ghoul Fool
Here's what you need: It's pretty basic. It'll loop over the layers (no layersets!!) and save out the layer name and the layer bounds for each layer.
这是您需要的: 这是非常基本的。它将遍历图层(没有图层集!!)并保存每个图层的图层名称和图层边界。
app.preferences.rulerUnits = Units.PIXELS;
var srcDoc = app.activeDocument;
var numOfLayers = srcDoc.layers.length;
var results = "";
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.length -4)
var theFile = srcDoc.path + "/" + docName + ".txt";
for (var i = 0; i < numOfLayers ; i++)
{
var theLayer = srcDoc.layers[i];
var lb = getLayerBounds(theLayer).toString();
results += theLayer.name + ": " + lb + "\n";
}
writeTextFile(theFile, results)
alert(results);
function getLayerBounds(alayer)
{
var x1 = parseFloat(alayer.bounds[0])
var y1 = parseFloat(alayer.bounds[1])
var x2 = parseFloat(alayer.bounds[2])
var y2 = parseFloat(alayer.bounds[3])
return [x1,y1,x2,y2]
}
function writeTextFile(afilename, output)
{
var txtFile = new File(afilename);
txtFile.open("w"); //
txtFile.writeln(output);
txtFile.close();
}
回答by Marko Avlija?
I have read the docs and combined best parts of psycho brm's and corrin_m's answer.
MY ANSWER ALSO CHECKS FOR ERRORS.
我已阅读文档并结合了psycho brm 和corrin_m 的答案的最佳部分。
我的回答还会检查错误。
It is not necessary to delete file if it exists because opening with "w" will overwrite existing file it.
如果文件存在,则没有必要删除它,因为用“w”打开会覆盖它现有的文件。
/* =======================================================
* Saves file as text. Overwrites old file if exists.
* Returns empty string if no errors, otherwise error message.
* =======================================================*/
function saveAsTextFile(filePath, content) {
var saveFile = new File(filePath);
saveFile.encoding = "UTF8";
saveFile.open("w");
if (saveFile.error != "")
return saveFile.error;
saveFile.write(content);
if (saveFile.error != "")
return saveFile.error;
saveFile.close();
if (saveFile.error != "")
return saveFile.error;
return "";
}
This is how I am using the function in my scripts
这就是我在脚本中使用该函数的方式
error = saveAsTextFile(filePath, content);
if (error === "") {
alert(filePath + " saved OK.");
}
else {
alert("Error saving " + filePath + "\n" + error);
}
BTW I am keeping this in separate file called commom-code.jsx and I can include it with following line (single line comments are intentional).
顺便说一句,我将它保存在名为 commom-code.jsx 的单独文件中,我可以将其包含在以下行中(单行注释是有意的)。
// @include 'common-code.jsx'
回答by corrin_m
I found the docs lacking but came up with this as a method to create and write to a new file in CS6:
我发现缺少文档,但想出了这个作为在 CS6 中创建和写入新文件的方法:
var s = "My string data here";
var file = new File();
var fileNew = file.saveDlg("Save new file");
fileNew.open("w");
fileNew.write(s);
fileNew.close();