12 KiB
12 KiB
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”代码。
# 典型结构
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) 项目中,建议采取以下步骤:
-
代码提取 (Extract):
- 废弃
.py文件。 - 将字符串内的 JS 代码提取并在
src/jsx/目录下建立对应的.jsx文件(建议按功能重命名,如ResizeUtils.jsx,BatchProcess.jsx)。
- 废弃
-
模块化重构 (Refactor):
- 原脚本大量使用全局变量,容易造成污染。需要将其封装为独立的函数,例如
function scaleLayerByAnchor(layerName, anchorLayerName) { ... }。 - 将通用的
ActionManager辅助函数(如executeAction的封装)移动到统一的工具库中。
- 原脚本大量使用全局变量,容易造成污染。需要将其封装为独立的函数,例如
-
UI 重写 (Modernize UI):
- 重点:
JSX8.py中的 ScriptUI 弹窗(灰色原生界面)应完全废弃。 - 使用 Vue + Element Plus/Arco Design 重写批量处理界面。
- 前端收集用户输入的路径和选项,通过
cep.ts桥接层传递给 JSX 执行核心逻辑。
- 重点:
-
功能桥接 (Bridge):
- 在
src/jsx/index.ts中暴露新的接口,供前端调用。 - 例如:
canvas_cut_image(对应 JSX4),auto_resize_layer(对应 JSX2)。
- 在