Photoshop CEP:将JSX对象转换为JS

时间:2019-06-24 06:56:21

标签: extendscript

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

在以下示例中,我尝试将文档docInfo中的文档宽度,高度和标尺单位发送回CEP Panel 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].

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

如果是,该如何获取我想要的信息?如何将JSX端的对象解析/转换为字符串,还是应该在JS端做到这一点?

有关如何做的示例将非常有帮助。我正在尝试学习Adobe CEP面板。

1 个答案:

答案 0 :(得分:1)

这些特定于ExtendScript定义的Photoshop对象:高度和宽度为UnitValues(它们都带有值和单位),而rulerUnits为Units,JSON无法正确地将它们作为对象传递从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等。