# 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)。
