javascript - Photoshop 图层 x/y 中心注册点坐标

标签 javascript adobe photoshop

目标:

设计一个我可以在 photoshop 中运行的脚本,它将为我提供 PSD 文件中每一层的 x 和 y 坐标,然后将其保存到一个文本文件中,我可以用它来提取所述数据。

进度:

我已经找到了一个可以完成此任务的脚本,并对其进行了自己的添加。

问题:

我的问题是我不是一个非常高级的编码员,我正在尝试获取图层中心注册点的 x 和 y 坐标,而不是左上角。我已经做了数小时的研究(也许没有向谷歌询问正确的问题)试图弄清楚这一点。我意识到我的理解水平无法与实际的软件开发人员相提并论,虽然我尊重这一点,但这里没有开发人员,我有点孤军奋战。我研究了一点 javascript,所以我对以下代码有足够的了解。

代码:

// Bring application forward
app.bringToFront();

// Set active Document variable and decode name for output
var docRef = app.activeDocument;
var docName = decodeURI(activeDocument.name);

// Define pixels as unit of measurement
var defaultRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;

// Define variable for the number of layers in the active document
var layerNum = app.activeDocument.artLayers.length;


// Define variable for the active layer in the active document
var layerRef = app.activeDocument.activeLayer;


// Define varibles for x and y of layers
var x = layerRef.bounds[0].value;
var y = layerRef.bounds[1].value;
var coords = "";

// Loop to iterate through all layers

function recurseLayers(currLayers) {
  for ( var i = 0; i < currLayers.layers.length; i++ ) {
    layerRef = currLayers.layers[i];
    x = layerRef.bounds[0].value;
    y = layerRef.bounds[1].value;
    coords += layerRef.name + ": " + x + "x" + "," + y + "y" + "\n";

//test if it's a layer set

    if ( isLayerSet(currLayers.layers[i]) ) {
      recurseLayers(currLayers.layers[i]);
    }
  }
}

//a test for a layer set

function isLayerSet(layer) {
  try {
    if ( layer.layers.length > 0 ) {
      return true;
    }
  }

  catch(err) {
    return false;
  }
}

// Ask the user for the folder to export to

var FPath = Folder.selectDialog("Save exported coordinates to");

// Detect line feed type

if ( $.os.search(/windows/i) !== -1 ) {
  fileLineFeed = "Windows";
}
else {
  fileLineFeed = "Macintosh";
}

// Export to txt file

function writeFile(info) {
  try {
    var f = new File(FPath + "/" + docName + ".txt");
    f.remove();
    f.open('a');
    f.lineFeed = fileLineFeed;
    f.write(info);
    f.close();
  }
  catch(e){}
}

// Run the functions

recurseLayers(docRef);
preferences.rulerUnits = defaultRulerUnits;

// Set preferences back to user's defaults

writeFile(coords);

// Show results

if ( FPath == null ) {
  alert("Export aborted", "Canceled");
}
else {
  alert("Exported " + layerNum + " layer's coordinates to " + FPath + "/" + 
docName + ".txt " + "using " + fileLineFeed + " line feeds.", "Success!");
}

最佳答案

层的 bounds 属性为您提供左上角。中间点是 x + 层宽的一半和 y + 层高的一半。您只需要图层尺寸和一些数学知识。

关于javascript - Photoshop 图层 x/y 中心注册点坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308754/

相关文章:

javascript - Firefox:如果 contenteditable 嵌套在可拖动父级中,则该内容不可编辑

javascript - 更改可变文本颜色

html - 如何从 Photoshop 导出 SVG 文件以便我可以对其进行编辑?

html - 如何在我的网页上显示与 photoshop 中相同的字体?

algorithm - 图像编辑软件中滤镜背后使用的算法是什么?

php - 有什么方法可以检查是否有人使用 Javascript/PHP 关闭了浏览器?

javascript - 使用 onsubmit ="return validate()"函数时文件验证不起作用

android - 如何为 Android Adob​​e AIR 设置媒体音量控制?

adobe - 是否可以使Adobe Reader在Windows上不持有文件锁定?

html - Dreamweaver 下拉菜单