Parsing 如何读取Adobe Photoshop文件,并获取图层名/组名?

Parsing 如何读取Adobe Photoshop文件,并获取图层名/组名?,parsing,converter,psd,Parsing,Converter,Psd,好的,所以我一直在浏览和寻找一个合适的答案,我的困境各地,到目前为止,我只找到了1/2的解决方案。这是: 简而言之,我的问题是如何允许上传PSD/AI文件,获取图层/组名称、图层样式等,并获取该信息并将其填入产品im构建的必需部分。首先,由于保密协议的条款,我不能完全讨论整个问题,但我有权在这里寻求帮助 我需要做的最终目标是获取文件中的信息并在其他地方使用它。例如,如果命名了一个层,我需要获取该信息并将其注册为产品中的有效层。我需要使用什么语言并不重要,因为我唯一不熟悉的语言是Ruby 通过文本

好的,所以我一直在浏览和寻找一个合适的答案,我的困境各地,到目前为止,我只找到了1/2的解决方案。这是:

简而言之,我的问题是如何允许上传PSD/AI文件,获取图层/组名称、图层样式等,并获取该信息并将其填入产品im构建的必需部分。首先,由于保密协议的条款,我不能完全讨论整个问题,但我有权在这里寻求帮助

我需要做的最终目标是获取文件中的信息并在其他地方使用它。例如,如果命名了一个层,我需要获取该信息并将其注册为产品中的有效层。我需要使用什么语言并不重要,因为我唯一不熟悉的语言是Ruby

通过文本编辑器或IDE打开PSD/AI文件时,可以看到文件名,如:App。那么,我应该如何,用什么语言来读取文件,获取图层名称,获取信息并在其他地方使用它呢

如果有人能给我指出正确的方向,那将是非常有帮助的,或者如果其他地方也回答了这个问题,那将是非常有帮助的

请记住,我应该使用的任何语言都必须能够在网页前端注册,如允许上传过程等

再次感谢


快乐编码

我想我没有完全回答你的问题,但希望这能帮助你:

首先,你也许可以通过Photoshop脚本得到你想要的东西,这就是JavaScript。实际上,它是ExtendScript,它与相同的东西非常接近。这可能不是理想的解决方案,因为您可能只想解析psd。就像我说的,这可能会给你指明正确的方向

其次,使文件本地化。在Photoshop脚本中,以这种方式查看图层名称更容易。如果那不合适,你就得找个成年人帮忙

第三,当你对图层进行分组时,Photoshop并不能使事情变得简单,你必须有一个递归函数,在所有图层上循环,然后才能得到你想要的。在大型PSD文件上,这可能会很慢

对于只有两层的简单PSD,请使用:

var numOfLayers = srcDoc.layers.length;

// main loop
for (var i = numOfLayers -1; i >= 0  ; i--)
{
  var thisLayer = srcDoc.layers[i];
  doStuff(thisLayer);
}

function doStuff(alayer)
{
  // do stuff!
  alert(alayer.name)
}
这是直截了当的-您可以在运行时将层名称添加到数组中。 对于更复杂的PSD文件,您需要递归函数:

// group layer vegetables
var allLayers = new Array();
var theLayers = collectAllLayers(app.activeDocument, 0);

function doStuff(alayer)
{
  // do stuff!
  alert(alayer.name)
}


// function collect all layers
function collectAllLayers (theParent, level)
{
  for (var m = theParent.layers.length - 1; m >= 0; m--)
  {
    var theLayer = theParent.layers[m];
    // apply the function to layersets;
    if (theLayer.typename == "ArtLayer")
    {
      // find the art layers
      doStuff(theLayer)
    }
    else
    {
      allLayers.push(level + theLayer.name);
      collectAllLayers(theLayer, level + 1)
    }
  }
}

谢谢你的回复!不过,首先,上传将是所有客户端,而不是服务器端。某些设计的大小超过1gb或更大。因此,这将是所有客户端。你的回答给了我一些新的见解,但并不完全是我正在寻找或尚未尝试的。大多数情况下,我需要抓取图层名称、颜色、样式,例如标签,然后获取这些信息,并将产品注册为标签。