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

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

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

有什么提示吗?

【问题讨论】:

    标签: javascript photoshop photoshop-script


    【解决方案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();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-24
            • 2013-09-22
            • 2017-05-31
            • 2013-02-22
            • 2011-06-26
            • 1970-01-01
            相关资源
            最近更新 更多