Photoshop脚本:更改文本图层的文本

时间:2013-01-28 20:51:38

标签: javascript text scripting photoshop layer

因为我没有足够的时间来学习有关PS-Scripting的所有知识,所以我想知道,如果你能帮助我的话。

这很简单。我想要一个JS脚本,它改变顶层的文本。 例如:Text为“#005”,脚本应加1,因此显示“#006”。 之后,它应该使用当前号码(006)导出(Save for Web& Devices w.d透明度@ 1280x720)文件。

这是一个图层的屏幕( omg in the german !! 11 ):imageshack.us/photo/my-images/706/helpal.png

1 个答案:

答案 0 :(得分:15)

  

为downvoters编辑:

     

,为了帮助社区并避免误导/错误信息(如果我在这种情况下做了任何事情)从而使StackOverflow成为一个更好的地方,请在下方添加评论,说明您的想法是什么代码或方向值得投降。如果有任何错误或误导,我会再学习一件事,我将不胜感激。

首先,您需要创建一个动作。

  1. 使用.jsx扩展名保存以下代码。
  2. 打开其中一张图片
  3. 创建新操作并按下面板下方的记录按钮(如果尚未激活)
  4. 转到File > Scripts > Browse并选择该脚本
  5. 停止录制动作
  6. 转到创建文件的文件夹并删除该新文件
  7. 然后你需要自动完成所有这些。使用无法打开文档

    1. 转到File > Automate > Batch
    2. 从选项
    3. 中选择必要的“设置”和“操作”名称
    4. 对于“来源”,选择“文件夹”,然后通过单击“选择...”按钮选择包含分层文件的文件夹
    5. 可能没有必要(取决于您的颜色设置),但您可以选择第3和第4个选项:Suppress File Open Options DialogsSuppress Color Profile Warnings。由于在录制时您没有包含打开文件的操作,因此请保持第一个选项Override Action Open Commands未被选中。否则它将不会打开任何文件,但仍然会尝试执行文件的脚本*编号。如有必要,请选择第二个选项Include All Subfolders
    6. 点击“确定”按钮。
    7. 使用CS6的人员的另一点是: Adobe Developer Connection表示......

        

      Adob​​e 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