Python 调用 Photoshop 执行脚本 修改图层文本内容 保存psd文件


// 修改文本图层内容的Photoshop脚本
// 用法:在Photoshop中执行此脚本,输入要修改的图层名称和新的文本内容

// 定义一个函数来修改文本图层
function modifyTextLayer(layerName, newText) {
    // 获取当前活动文档
    var doc = app.activeDocument;

    // 遍历所有图层
    for (var i = 0; i < doc.layers.length; i++) {
        var layer = doc.layers[i];

        // 检查图层是否为文本图层并且名称匹配
        if (layer.kind == LayerKind.TEXT && layer.name == layerName) {
            // 修改文本内容
            layer.textItem.contents = newText;
            return true;
        }
    }
    return false;
}

// 主函数
function main() {
    // 通过对话框获取用户输入
//     var layerName = prompt("请输入要修改的文本图层的名称:", "");
//     if (layerName == null) {
//         return; // 用户取消
//     }

    var layerName = '文本1'
    var newText = 'ssdfe反反复复'

//     var newText = prompt("请输入新的文本内容:", "");
//     if (newText == null) {
//         return; // 用户取消
//     }

    // 尝试修改文本图层
    if (modifyTextLayer(layerName, newText)) {
//         alert("文本修改成功!");
    } else {
//         alert("未找到名为 \"" + layerName + "\" 的文本图层。");
    }
}

// 执行主函数
main();

# 核心逻辑:1 ps软件提前录制好动作 执行脚本 存储 关闭; 2 python打开ps软件 触发指定动作处理; 3 通过监听ps当前是否有打开的文档来判断是否处理完成


# 2. 连接Photoshop
try:
    app = win32com.client.Dispatch("Photoshop.Application")
    app.Visible = True  # 显示PS界面(方便观察,可改为False静默运行)
    doc = app.Open(psd_path)

    time.sleep(3)

    custom_log("✅ 成功连接到Photoshop")
except Exception as e:
    custom_log(f"❌ 连接Photoshop失败:{str(e)}(请确保PS已安装并正常启动)")
    return

app.DoAction("修改文本v1", "默认动作") # 需要提前在ps软件中设置好,脚本执行完直接存储关闭

# 3. 等待处理完毕(监听PS状态)
wait_for_psd_processing(app, psd_name)

def wait_for_psd_processing(app, target_psd_name):
    """
    监听Photoshop状态:没有打开的文档识别为执行完成
    :param target_psd_name: PSD文件名(含后缀)
    """
    start_time = time.time()
    while True:
        # 检查是否超时
        if time.time() - start_time > MAX_TIMEOUT:
            raise TimeoutError(f"单个文件处理超时(超过{MAX_TIMEOUT}秒)")

        # 1. 检查当前打开的文档数量(处理完后脚本应关闭文档,数量为0)
        open_doc_count = app.Documents.Count

        if open_doc_count == 0:
            custom_log("✅ 当前PSD处理完毕")
            return True
        else:
            time.sleep(CHECK_INTERVAL)

posted @ 2025-11-11 13:19  露娜喵喵  阅读(1)  评论(0)    收藏  举报