Edit in GitHubLog an issue

Photoshop API

概述

下面一行允许你通过UXP访问Photoshop的DOM。

Copied to your clipboard
const app = require('photoshop').app;

你可以通过app 打开文件,修改文件,运行菜单项,以及更多操作。

最低版本

现在你会发现属性和方法的最小版本信息。 这个版本标签对应于成员被引入或最后一次重大更新的Photoshop的版本。 对于属性,你会发现一列 "MIN VERSION"。 对于方法,版本号以标签的形式出现在名称的右边。

同步与异步

ExtendScript(和CEP)与Photoshop中的UXP之间的一个重要区别是,所有ExtendScript对Photoshop的调用都是同步的。这意味着它们在执行时阻塞了 Photoshop 的 UI。在 UXP 中,方法调用是异步的,并且不会阻塞 UI 线程。

为了在 ExtendScript DOM 和 UXP DOM 之间实现平稳过渡,API 中的所有属性(获取和设置)都被设计为同步的,不需要等待。值得注意的是,在后台,它们的性质是异步的。

使用Photoshop对象工作

Photoshop - app

通过 app 对象,你可以访问Photoshop的其他对象和方法。

获取当前打开的活动文档

Copied to your clipboard
const doc = app.activeDocument;

而你可以像这样 获取所有打开的文件的数组对象。

Copied to your clipboard
const allDocuments = app.documents;

查看app中的更多属性和方法 Photoshop.

Detour - ExecuteAsModal

在直接进入Photoshop UXP插件开发之前,需要了解的一个关键概念是我们所称的 "以模式执行"。任何和所有可能修改文档或应用程序状态的命令,都必须利用 ExecuteAsModal

Copied to your clipboard
1async function makeDefaultDocument(executionContext) {
2 const app = require('photoshop').app;
3 let myDoc = await app.createDocument({preset: "My Web Preset 1"});
4}
5
6await require('photoshop').core.executeAsModal(makeDefaultDocument);

正如你可能注意到的,这种限制可能包含了你的插件的大部分功能!但是,这种模式有很多好处。然而,这种模式有很多好处。在Execute as Modal文档中提供了更详细的解释。

documents

代表一个单一的、开放的 Photoshop 文档。从这个对象中,你可以访问该文件的层、尺寸、分辨率等。你可以裁剪它,添加/删除/复制层,调整大小,旋转和保存它。

获取活动文档的尺寸。

Copied to your clipboard
1const app = require('photoshop').app;
2const myDoc = app.activeDocument;
3const height = myDoc.height;
4const width = myDoc.width;
5const resolution = myDoc.resolution;
6console.log(`文档的大小是 ${width} x ${height} 分辨率为 ${resolution}`);

flatten所有的文档

Copied to your clipboard
1const app = require('photoshop').app;
2const toFlatten = app.documents;
3async function flattenThem(executionContext) {
4 toFlatten.forEach((photoshopDoc) => {
5 photoshopDoc.flatten();
6 });
7};
8
9await require('photoshop').core.executeAsModal(flattenThem);

创建一个图层

Copied to your clipboard
1const app = require('photoshop').app;
2async function newColorDodgeLayer(executionContext) {
3 await app.activeDocument.createLayer({ name: "myLayer", opacity: 80, blendMode: "colorDodge" });
4};
5
6await require('photoshop').core.executeAsModal(newColorDodgeLayer);

查看更多有关的属性和方法 Document 通过 DocumentDocuments

Layer

代表一个图层,或一组图层。这个对象与一个特定的文档相联系。

降低一个图层的不透明度,把它带到前面来。

Copied to your clipboard
1const app = require('photoshop').app;
2const doc = app.activeDocument;
3function bringActiveLayerToFront(executionContext) {
4 const layer = doc.activeLayers[0];
5 layer.opacity = layer.opacity - 10;
6 layer.bringToFront();
7};
8
9await require('photoshop').core.executeAsModal(bringActiveLayerToFront);

缩小名称中包含 "smaller" 的每个图层的比例

Copied to your clipboard
1const app = require('photoshop').app;
2const doc = app.activeDocument;
3const layers = doc.layers;
4async function scaleLayers(executionContext) {
5 for (layer of layers) {
6 if (layer.name.includes('smaller')) {
7 await layer.scale(80, 80);
8 }
9 }
10};
11
12await require('photoshop').core.executeAsModal(scaleLayers);

注意,一个图层的kind属性可以是GROUP ,用于组图层(一个包含多个图层的图层或文件夹)。要访问一个组图层中的图层,请使用 layers属性,以及parent属性来浏览图层列表树。

LayerLayers下查看`Layer的更多属性和方法。

Actions and ActionSets

动作和动作集


许多Photoshop用户大量使用 Actions 面板。动作本质上是可以记录和回放的宏,用于编写你经常使用的命令和工具。操作被分组为

Action Sets,类似于图层可以被分组为组图层的方式。

行动对象允许你删除、复制、重命名和播放行动。目前还没有办法使用 UXP 来 create 一个动作。

Actions 类似, Action Sets 对象允许您删除、复制、重命名和播放动作集。目前还没有办法 create 一个行动集。

请注意 , ActionsAction Sets 存在于整个应用程序;它们不与特定的 Document 相联系。

举个例子在默认中找到这个动作并且执行(如果有)

Copied to your clipboard
1const app = require('photoshop').app;
2const allActionSets = app.actionTree;
3const firstActionSet = allActionSets[0];
4let actions = new Map(); // JS Map 允许简单的 "按名称查找 " 操作
5firstActionSet.actions.forEach((action) => { actions.set(action.name, action)});
6const myAction = actions.get("Wood Frame - 50 pixel");
7if (myAction) { // 用户可能已经删除了这个动作
8 async function playMyAction(executionContext) {
9 await myAction.play();
10 }
11 await require('photoshop').core.executeAsModal(playMyAction);
12}

查看更多的属性和方法 Action 根据 ActionActionSet

batchPlay

Photoshop 是复杂的软件,有许多内部类和方法。并非所有这些都通过 UXP 公开。新的接口正在开发中,并将随Photoshop的每个版本一起发布。在此期间,如果你的插件或脚本需要做一些在当前DOM中没有公开的事情,你可能会使用 batchPlay.

BatchPlay是用来访问Photoshop尚未通过API暴露的功能。BatchPlay是一种将多个动作送入Photoshop事件队列并返回其结果的方法。

ExtendScript有 executeAction ;这类似于UXP的 batchPlay 然而 executeAction 一次只能播放一个描述符,batchPlay 可以接受一个动作描述符数组。如果你有多个Photoshop操作需要连续执行,在一个batchPlay 使用executeAction是更好的选择

与ExtendScript不同的是,batchPlay 提供 Class 来构建动作描述符、引用和值,batchPlay 接受普通的JSON对象。

batchPlay documentation 中包含了关于如何为batchPlay 的使用构建JSON的细节。

UXP Scripting

UXP 不再只是用于插件。 单独的 JavaScript 文件可以被开发并执行,详见 UXP Scripting section.

Was this helpful?
  • Privacy
  • Terms of Use
  • Do not sell or share my personal information
  • AdChoices
Copyright © 2023 Adobe. All rights reserved.