# psmark 脚本分析与功能报告 ## 1. 概述 在 `psmark` 目录下发现的 `JSX*.py` 文件(JSX2.py - JSX9.py)主要承担了**Photoshop 自动化脚本容器**的角色。 这些 Python 文件本身不包含图像处理逻辑,而是作为 Adobe ExtendScript (JSX) 代码的“包装壳”。所有的核心自动化逻辑(如图层操作、裁片缩放、排版等)都由嵌入的 JSX 字符串实现。 ## 2. 文件功能详细清单 | 文件名 | 核心功能 | 详细描述 | | :----------- | :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **JSX2.py** | **裁片射出宽高缩放** | - 遍历文档图层,根据图层名称(包含尺寸信息)进行精确缩放。
- 包含像素与毫米的自动换算。
- 处理 90 度/180 度 旋转逻辑。
- 使用 `ActionManager` 进行高效的选区和变换操作。 | | **JSX3.py** | **设置花样组顺序居中** | - 专用于印花对位。
- 自动识别 "P" 开头的花样图层。
- 将花样层对齐到“大货裁片”组的中心位置。
- 包含蒙版选区获取和坐标计算逻辑。 | | **JSX4.py** | **图像切割** | - 根据特定图层的边界对文档进行裁剪。
- 包含出血/边距处理(例如自动从选区扩展一定像素)。
- 适用于从大图中提取独立裁片。 | | **JSX5.py** | **图像切割 (变体)** | - 功能与 JSX4 类似,侧重于特定图层组的裁剪和蒙版应用。 | | **JSX6.py** | **裁片射出宽高缩放 (变体)** | - 与 JSX2 类似,提供裁片缩放和定位功能。
- 强调了“前景色修改”和“图层选择”等辅助操作。 | | **JSX7.py** | **裁片射出缩放模板** | - **关键特性**:引入了“**缩放定位点**”图层概念。
- 不以图层中心为原点,而是根据“缩放定位点”图层的选区中心进行缩放变换。
- 包含 `烧花线添加` 功能,用于绘制剪口和标记线。 | | **JSX8.py** | **批量化替换外链新 (UI)** | - **全自动化工作流脚本**。
- **内置 UI**:包含一个 ScriptUI 编写的对话框,用于选择文件夹路径。
- **功能**:
1. 批量打开文件。
2. 自动替换智能对象链接(换花型)。
3. `码标添加`:自动生成包含文件名的尺寸标记。
4. `花样标准化`:统一花样大小并添加白底。
5. 自动另存为 TIF 格式并归档。 | | **JSX9.py** | **按中心点比例缩放** | - 结合了 JSX2 和 JSX7 的特性。
- 专注于按“缩放定位点”进行**等比例**或**宽高独立**缩放。
- 包含详细的 `ActionManager` 变换代码(`transform` 命令)。 | | **JSX16.py** | **花样图层导出** | - 遍历图层组(特别是“填充底图”),将子图层导出为 TIF。
- 处理“最大白边值”图层以确定裁剪边界。
- 包含智能对象转换、重新链接、蒙版合并等复合操作。 | | **JSX17.py** | **定位码批量快速换图 (UI)** | - **带 ScriptUI**。
- 全自动批量流程:选择模板路径、素材路径、输出路径。
- 遍历素材图片,打开模板,替换智能对象(`placedLayerRelinkToFile`),应用预设图案填充,合并图层并另存。
- 支持读取 JSON 数据来匹配图案名称。 | | **JSX18.py** | **龙服快速换图 (UI)** | - **带 ScriptUI**(定制版本)。
- 读取文件夹文件列表,允许用户在 UI 中输入“数量”信息。
- 根据输入信息更新图层文本内容,替换裁片智能对象链接,合并并保存。 | | **JSX19.py** | **裁片抓取与导入** | - 批量置入 PDF 文件。
- **自动旋转特性**:通过解析文件名(如包含 `_180`)自动判断是否需要旋转 180 度导入。
- 自动建立“大货裁片”组并归档。 | | **JSX20.py** | **混合裁片导出** | - 遍历包含“大货裁片”名称的图层组。
- 逐个提取子图层,应用蒙版,裁切到边界,导出为 TIF 文件。
- 使用历史记录回退(`historyState`)来恢复状态以处理下一个图层。 | | **JSX21.py** | **裁片排版基础** | - 基础排版功能库。
- `创建裁片排版文档`:按毫米创建新画布。
- `置入链接的智能对象`:将外部文件作为链接对象置入。
- `裁片排版_lay`:提供基于毫米坐标的精确位移功能。 | | **JSX22.py** | **模特换衣功能 (UI)** | - **带 ScriptUI**。
- 针对模特展示图的批量替换。
- 遍历素材目录,替换模板中名为“替换对象”的智能对象。
- 支持保持原始目录结构导出,支持切片导出(Web 切片)。 | | **JSX23.py** | **S/O 样自动连晒 (UI)** | - **带 ScriptUI**。
- 自动生成连晒(米样)效果。
- 将图片定义为图案,填充到指定宽高的文档中(平铺),并添加对应的文件名文字标签。
- 保存两份:一份纯拼贴,一份带文字标签。 | | **JSX24.py** | **自动米样拼贴 (UI)** | - **带 ScriptUI**。
- 与 JSX23 类似但逻辑不同,这是真正的**拼图**(Collage)。
- 读取文件夹所有图片,按高度排序。
- 自动计算总画布大小,将图片紧凑排列(换行逻辑)拼贴到一个大文档中。 | | **JSX26.py** | **模特多色换图** | - 利用**快照**(Snapshot)机制进行批量处理。
- 遍历文件夹素材,替换“贴图位置”组内的图层内容。
- 支持对替换后的图案进行位移(Offset)以制作不同花位效果。
- 导出 TIF 后回退到快照状态。 | | **JSX27.py** | **新的米样缩放 (UI)** | - **带 ScriptUI**。
- 批量调整图片尺寸到指定的厘米数(Resize Image)。
- 随后进行画布扩展和文字标签添加,用于制作标准化的缩放样图。 | ## 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)。