Files
DP/tempdocs/psmark脚本分析报告.md

90 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# psmark 脚本分析与功能报告
## 1. 概述
`psmark` 目录下发现的 `JSX*.py` 文件JSX2.py - JSX9.py主要承担了**Photoshop 自动化脚本容器**的角色。
这些 Python 文件本身不包含图像处理逻辑,而是作为 Adobe ExtendScript (JSX) 代码的“包装壳”。所有的核心自动化逻辑(如图层操作、裁片缩放、排版等)都由嵌入的 JSX 字符串实现。
## 2. 文件功能详细清单
| 文件名 | 核心功能 | 详细描述 |
| :----------- | :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **JSX2.py** | **裁片射出宽高缩放** | - 遍历文档图层,根据图层名称(包含尺寸信息)进行精确缩放。<br>- 包含像素与毫米的自动换算。<br>- 处理 90 度/180 度 旋转逻辑。<br>- 使用 `ActionManager` 进行高效的选区和变换操作。 |
| **JSX3.py** | **设置花样组顺序居中** | - 专用于印花对位。<br>- 自动识别 "P" 开头的花样图层。<br>- 将花样层对齐到“大货裁片”组的中心位置。<br>- 包含蒙版选区获取和坐标计算逻辑。 |
| **JSX4.py** | **图像切割** | - 根据特定图层的边界对文档进行裁剪。<br>- 包含出血/边距处理(例如自动从选区扩展一定像素)。<br>- 适用于从大图中提取独立裁片。 |
| **JSX5.py** | **图像切割 (变体)** | - 功能与 JSX4 类似,侧重于特定图层组的裁剪和蒙版应用。 |
| **JSX6.py** | **裁片射出宽高缩放 (变体)** | - 与 JSX2 类似,提供裁片缩放和定位功能。<br>- 强调了“前景色修改”和“图层选择”等辅助操作。 |
| **JSX7.py** | **裁片射出缩放模板** | - **关键特性**:引入了“**缩放定位点**”图层概念。<br>- 不以图层中心为原点,而是根据“缩放定位点”图层的选区中心进行缩放变换。<br>- 包含 `烧花线添加` 功能,用于绘制剪口和标记线。 |
| **JSX8.py** | **批量化替换外链新 (UI)** | - **全自动化工作流脚本**。<br>- **内置 UI**:包含一个 ScriptUI 编写的对话框,用于选择文件夹路径。<br>- **功能**<br> 1. 批量打开文件。<br> 2. 自动替换智能对象链接(换花型)。<br> 3. `码标添加`:自动生成包含文件名的尺寸标记。<br> 4. `花样标准化`:统一花样大小并添加白底。<br> 5. 自动另存为 TIF 格式并归档。 |
| **JSX9.py** | **按中心点比例缩放** | - 结合了 JSX2 和 JSX7 的特性。<br>- 专注于按“缩放定位点”进行**等比例**或**宽高独立**缩放。<br>- 包含详细的 `ActionManager` 变换代码(`transform` 命令)。 |
| **JSX16.py** | **花样图层导出** | - 遍历图层组(特别是“填充底图”),将子图层导出为 TIF。<br>- 处理“最大白边值”图层以确定裁剪边界。<br>- 包含智能对象转换、重新链接、蒙版合并等复合操作。 |
| **JSX17.py** | **定位码批量快速换图 (UI)** | - **带 ScriptUI**。<br>- 全自动批量流程:选择模板路径、素材路径、输出路径。<br>- 遍历素材图片,打开模板,替换智能对象(`placedLayerRelinkToFile`),应用预设图案填充,合并图层并另存。<br>- 支持读取 JSON 数据来匹配图案名称。 |
| **JSX18.py** | **龙服快速换图 (UI)** | - **带 ScriptUI**(定制版本)。<br>- 读取文件夹文件列表,允许用户在 UI 中输入“数量”信息。<br>- 根据输入信息更新图层文本内容,替换裁片智能对象链接,合并并保存。 |
| **JSX19.py** | **裁片抓取与导入** | - 批量置入 PDF 文件。<br>- **自动旋转特性**:通过解析文件名(如包含 `_180`)自动判断是否需要旋转 180 度导入。<br>- 自动建立“大货裁片”组并归档。 |
| **JSX20.py** | **混合裁片导出** | - 遍历包含“大货裁片”名称的图层组。<br>- 逐个提取子图层,应用蒙版,裁切到边界,导出为 TIF 文件。<br>- 使用历史记录回退(`historyState`)来恢复状态以处理下一个图层。 |
| **JSX21.py** | **裁片排版基础** | - 基础排版功能库。<br>- `创建裁片排版文档`:按毫米创建新画布。<br>- `置入链接的智能对象`:将外部文件作为链接对象置入。<br>- `裁片排版_lay`:提供基于毫米坐标的精确位移功能。 |
| **JSX22.py** | **模特换衣功能 (UI)** | - **带 ScriptUI**。<br>- 针对模特展示图的批量替换。<br>- 遍历素材目录,替换模板中名为“替换对象”的智能对象。<br>- 支持保持原始目录结构导出支持切片导出Web 切片)。 |
| **JSX23.py** | **S/O 样自动连晒 (UI)** | - **带 ScriptUI**。<br>- 自动生成连晒(米样)效果。<br>- 将图片定义为图案,填充到指定宽高的文档中(平铺),并添加对应的文件名文字标签。<br>- 保存两份:一份纯拼贴,一份带文字标签。 |
| **JSX24.py** | **自动米样拼贴 (UI)** | - **带 ScriptUI**。<br>- 与 JSX23 类似但逻辑不同,这是真正的**拼图**Collage。<br>- 读取文件夹所有图片,按高度排序。<br>- 自动计算总画布大小,将图片紧凑排列(换行逻辑)拼贴到一个大文档中。 |
| **JSX26.py** | **模特多色换图** | - 利用**快照**Snapshot机制进行批量处理。<br>- 遍历文件夹素材,替换“贴图位置”组内的图层内容。<br>- 支持对替换后的图案进行位移Offset以制作不同花位效果。<br>- 导出 TIF 后回退到快照状态。 |
| **JSX27.py** | **新的米样缩放 (UI)** | - **带 ScriptUI**。<br>- 批量调整图片尺寸到指定的厘米数Resize Image。<br>- 随后进行画布扩展和文字标签添加,用于制作标准化的缩放样图。 |
## 3. 技术架构特点
### 3.1 Python 包装器模式
实际上是“伪 Python”代码。
```python
# 典型结构
dxf7_jscode = """
function 核心功能() {
// 实际的 ExtendScript (JavaScript) 代码
var doc = app.activeDocument;
...
}
"""
```
这种结构是为了便于 Python 后端(可能是旧的自动化系统)直接将 JS 代码发送给 Photoshop 执行。迁移时应直接提取 `"""` 内部的内容。
### 3.2 ActionManager (AM) 代码
脚本极度依赖 Photoshop 的底层 ActionManager API`executeAction`, `ActionDescriptor`)。
- **优点**:执行速度快,能实现 DOM API普通 JS 对象)无法实现的功能(如“再次变换”、“应用图层样式”、“特定算法的选区运算”)。
- **缺点**:代码可读性差,维护难度大(充斥着 `stringIDToTypeID`)。
### 3.3 命名约定
脚本逻辑强依赖于图层和组的命名规范:
- `P...`:识别为花样图层。
- `-大货裁片`:识别为标准的裁片组模板。
- `缩放定位点`:用于计算变换中心的辅助图层。
- `_` 分隔符:用于从图层名中提取尺寸参数(如 `名称_宽度_高度`)。
## 4. 迁移与集成建议 (DesignerCEP)
为了将这些资产整合到当前的 `DesignerCEP` (Vue + TypeScript + CEP) 项目中,建议采取以下步骤:
1. **代码提取 (Extract)**
- 废弃 `.py` 文件。
- 将字符串内的 JS 代码提取并在 `src/jsx/` 目录下建立对应的 `.jsx` 文件(建议按功能重命名,如 `ResizeUtils.jsx`, `BatchProcess.jsx`)。
2. **模块化重构 (Refactor)**
- 原脚本大量使用全局变量,容易造成污染。需要将其封装为独立的函数,例如 `function scaleLayerByAnchor(layerName, anchorLayerName) { ... }`
- 将通用的 `ActionManager` 辅助函数(如 `executeAction` 的封装)移动到统一的工具库中。
3. **UI 重写 (Modernize UI)**
- **重点**`JSX8.py` 中的 ScriptUI 弹窗(灰色原生界面)应完全废弃。
- 使用 **Vue + Element Plus/Arco Design** 重写批量处理界面。
- 前端收集用户输入的路径和选项,通过 `cep.ts` 桥接层传递给 JSX 执行核心逻辑。
4. **功能桥接 (Bridge)**
-`src/jsx/index.ts` 中暴露新的接口,供前端调用。
- 例如:`canvas_cut_image` (对应 JSX4), `auto_resize_layer` (对应 JSX2)。