Photoshop CEP:JSX 对象到 JS

Photoshop CEP: JSX Object to JS

我 运行 遇到了在 Photoshop 中使用 evalScript 将数据从 JSX 发送到 JS 的问题。

在下面的示例中,我尝试将对象 docInfo 中的文档宽度、高度和标尺单位发送回我的 CEP 面板 JS。

问题是,当我解析对象时,它将三个属性全部显示为对象,而我认为它们应该都是字符串。

JS:

    function psdInfo() {
        csInterface.evalScript("getDocInfo()", function(res) {
            if (EvalScript_ErrMessage == res) {
                console.error('EvalScript_ErrMessage and res is' + typeof res + ' res is ' + res);
            }
            else {
                var o = JSON.parse(res);
                var str = "Object received from JSX:\n";
                for (var prop in o) {
                    str += prop + " [" + typeof o[prop] +" ]: " + o[prop] + ".\n"; 
                }
                console.log(str);
            }
        }); 
    }

JSX:

function getDocInfo()
{
    var doc = app.activeDocument,
        docWidth = doc.width,
        docHeight = doc.height,
        originalRulerUnits = app.preferences.rulerUnit;


    var docInfo = {
        width: docWidth,
        height: docHeight,
        originalRulerUnits: originalRulerUnits
    };
    return JSON.stringify(docInfo);
}

我的期望:

Object received from JSX:
width [string ]: '1920 px'.
height [string ]: '1920 px'.
originalRulerUnits [string ]: 'UNITS.PIXELS'.

我得到的:

Object received from JSX:
width [object ]: [object Object].
height [object ]: [object Object].
originalRulerUnits [object ]: [object Object].

我的问题是 - 我做错了什么吗?这些实际上是对象吗?

如果是,我如何获得我想要的信息?我如何 parse/convert 将 JSX 端的对象字符串化,或者我应该在 JS 端这样做?

操作方法的示例非常有用。我正在尝试学习 Adob​​e CEP 面板。

那些特定于 ExtendScript 定义的 Photoshop 对象:高度和宽度是 UnitValues(它们同时带有值和单位)并且 rulerUnits 是 Units,JSON can'没有正确地将它们作为对象从 JSX 传递给 JS。因此,在传递 docInfo 之前,您需要确保已使用 .toString() 方法将它们转换为字符串:

function getDocInfo()
{
    var doc = app.activeDocument,
        docWidth = doc.width.toString(),
        docHeight = doc.height.toString(),
        originalRulerUnits = app.preferences.rulerUnits.toString();

    var docInfo = {
        width: docWidth,
        height: docHeight,
        originalRulerUnits: originalRulerUnits
    };
    return JSON.stringify(docInfo);
}

结果:

{"width":"1024 px","height":"1024 px","originalRulerUnits":"Units.PIXELS"}

您可以在 JavaScript Tools Guide pdf 中阅读有关特定对象的更多信息:有 FileFolderSolidColor 和其他。