如何通过 Photoshop JavaScript 将文本写入文本文件?

Posted

技术标签:

【中文标题】如何通过 Photoshop JavaScript 将文本写入文本文件?【英文标题】:How to write text to a text file by Photoshop JavaScript? 【发布时间】:2011-09-22 13:14:00 【问题描述】:

我查看了Photoshop CS5 Scripting Guide and Photoshop CS5 javascript Reference,但找不到将文本写入纯文本文件的方法。有什么办法吗?

我想在一个文档中记录每个图层对象bounds的值。

有什么提示吗?

【问题讨论】:

【参考方案1】:

这对我有用,保存与原始文档同名的文本,但扩展名为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();

我不知道它是如何工作的,photoshop 脚本是一团糟,我只是不断地将我找到的几个脚本混合在一起,直到它起作用为止。

另外,如果有人需要,这里有一个脚本,它也将活动文档保存为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);

【讨论】:

【参考方案2】:

文件系统访问记录在 Adob​​e 的 JavaScript Tools Guide (PDF) 中。

下载 PDF 文件并查看“文件系统访问”部分。

【讨论】:

谢谢!我在 /Applications/Utilities/Adobe Utilities-CS5.localized/ExtendScript Toolkit CS5/SDK 中找到了文件【参考方案3】:

这是您需要的: 这是非常基本的。它将遍历图层(没有图层集!!)并保存图层名称和每个图层的图层边界。

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();

【讨论】:

【参考方案4】:

我已阅读文档并结合了心理 brm 和 corrin_m 答案的最佳部分。 我的答案也会检查错误。

如果文件存在,则不必删除,因为用“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 "";

这就是我在脚本中使用该函数的方式

error = saveAsTextFile(filePath, content);
if (error === "") 
  alert(filePath + " saved OK.");

else 
  alert("Error saving " + filePath + "\n" + error);

顺便说一句,我将其保存在名为 common-code.jsx 的单独文件中,我可以将其包含在以下行中(单行 cmets 是有意的)。

// @include 'common-code.jsx'

【讨论】:

【参考方案5】:

我发现缺少文档,但想出了这个作为在 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();

【讨论】:

以上是关于如何通过 Photoshop JavaScript 将文本写入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用扩展脚本(javascript)如何从 Photoshop 颜色表中获取颜色值

如何在photoshop javascript中定义百分比画布增加

Photoshop JavaScript 图层创建

如何在 Photoshop JavaScript API 中加载图层透明度并保存为路径?

Photoshop Javascript 的奇怪行为

javascript Dataset para Photoshop