我正在尝试为Photoshop创建一个插件。我的文件结构如下(如Adobe关于构建插件的指南所建议):
我的根文件夹包含两个文件夹:客户端和主机。 客户端文件夹包含index.html和index.js。 Index.html提供了设计并引用了两个javascript文档。 Index.js包含对index.html中元素的引用,并发送指令以触发下面提到的index.jsx文件夹中包含的函数。
主机文件夹包含index.jsx,其中包含实际上触发photoshop工具的所有功能。为了获得此javascript代码,我在Mac上使用xtools将我创建的photoshop操作转换为.jsx文件。
我希望我的插件具有一个文本框,用户可以在其中输入一个值(必须为数字),然后单击一个按钮以触发一个函数,其中一部分需要包含该函数的值。他们输入的号码。
在此示例中,该功能将图像调整为用户所需的像素数。
(注意:-当数字在函数中为静态/预设且脚本无需任何其他输入即可简单触发该函数时,脚本可完美工作-我只是在努力将文本框中的值输入函数中)
这是每个文档上的代码:
index.html:
<input type="text" id="resizeinput" placeholder="enter value in pixels">
<button id="resizebutton">Go!</button>
Index.js:
var customresize = document.querySelector("#resizebutton");
customresize.onclick = function() {
csInterface.evalScript("ResizeCustom()");
};
Index.jsx:
cTID = function(s) { return app.charIDToTypeID(s); };
sTID = function(s) { return app.stringIDToTypeID(s); };
//
//==================== Resize Custom ==============
//
function ResizeCustom() {
// Image Size
function step1(enabled, withDialog) {
if (enabled != undefined && !enabled)
return;
var dialogMode = (withDialog ? DialogModes.ALL : DialogModes.NO);
var desc1 = new ActionDescriptor();
desc1.putUnitDouble(cTID('Wdth'), cTID('#Pxl'), 1234);
desc1.putBoolean(sTID("scaleStyles"), true);
desc1.putBoolean(cTID('CnsP'), true);
desc1.putEnumerated(cTID('Intr'), cTID('Intp'), sTID("bicubicSmoother"));
executeAction(sTID('imageSize'), desc1, dialogMode);
};
step1(); // Image Size
};
我需要引用在文本框“ #resizeinput”中输入的值,在index.jsx中的javascript表示“ 1234”的地方。
到目前为止,我最好的选择是将1234替换为: document.getElementById(“#resizeinput”)。value)
但这没用。
答案 0 :(得分:0)
在您的Index.js中:
var customresize = document.querySelector("#resizebutton"),
resizeInput = document.querySelector("#resizeinput");
customresize.onclick = function()
{
csInterface.evalScript("ResizeCustom(" + resizeInput.value + ")");
};
在Index.jsx中:
cTID = function(s) { return app.charIDToTypeID(s); };
sTID = function(s) { return app.stringIDToTypeID(s); };
function ResizeCustom(_arg) {
var desc1 = new ActionDescriptor();
desc1.putUnitDouble(cTID('Wdth'), cTID('#Pxl'), _arg);
desc1.putBoolean(sTID("scaleStyles"), true);
desc1.putBoolean(cTID('CnsP'), true);
desc1.putEnumerated(cTID('Intr'), cTID('Intp'), sTID("bicubicSmoother"));
executeAction(sTID('imageSize'), desc1, DialogModes.NO);
};
请注意,这不会做任何检查(如果您尝试传递字符串,则会出现错误)。
p.s。在Abdobe的世界中,插件是用C ++编写的,而HTML面板是扩展。以防万一:)
p.p.s我建议使用HTML Panels Tips检查Davide Barranca的博客,例如关于将数据从JS传递到JSX的问题:https://www.davidebarranca.com/2014/01/html-panels-tips-4-passing-objects-from-html-to-jsx/