利用photoshop+python批量替换PS模板中的图片和文字

402 阅读3分钟

利用photoshop+python批量替换PS模板中的图片和文字 要利用 Photoshop 和 Python 实现批量替换 PS 模板中的图片和文字,你可以结合使用 Adobe Photoshop 的脚本功能(通过 JavaScript、AppleScript 或 VBScript 编写)和 Python 来自动化这个过程。以下是具体步骤:

方法:使用 Photoshop 脚本 + Python

1. 准备 Photoshop 模板

  • 确保你的 Photoshop 模板中有一个或多个图层用于放置图片,并且这些图层被命名为特定的名称(例如 "Placeholder_Image")。
  • 同样地,确保有文本图层用于需要替换的文字内容,并为这些图层指定独特的名称(例如 "Placeholder_Text")。

2. 编写 Photoshop 脚本

  • 使用 JavaScript 编写一个 Photoshop 脚本,该脚本将根据传入的参数替换模板中的图片和文字。保存此脚本文件(如 replaceContent.jsx)。
javascript
深色版本
#target photoshop

// Function to replace image in a specified layer
function replaceImage(layerName, imagePath) {
    var doc = app.activeDocument;
    var layer = doc.artLayers.getByName(layerName);

    if (layer.kind == LayerKind.SMARTOBJECT) {
        layer.smartObjectPlace(imagePath);
    } else {
        alert("Layer " + layerName + " is not a Smart Object.");
    }
}

// Function to replace text in a specified layer
function replaceText(layerName, newText) {
    var doc = app.activeDocument;
    var layer = doc.artLayers.getByName(layerName);

    if (layer.kind == LayerKind.TEXT) {
        var textItem = layer.textItem;
        textItem.contents = newText;
    } else {
        alert("Layer " + layerName + " is not a Text Layer.");
    }
}

// Example usage
replaceImage("Placeholder_Image", "path/to/your/image.jpg");
replaceText("Placeholder_Text", "New Text Content");

3. 编写 Python 脚本

  • 使用 Python 调用上述 Photoshop 脚本,并传递必要的参数。可以使用 subprocess 模块来运行脚本,并通过命令行参数传递信息。
python
深色版本
import subprocess
import os
from pathlib import Path

def run_photoshop_script(script_path, image_path, text_content):
    # 构建命令
    command = [
        'photoshop',  # or 'C:\Program Files\Adobe\Adobe Photoshop 2024\Photoshop.exe' on Windows
        '-r', script_path,
        image_path, text_content
    ]

    # 运行命令
    result = subprocess.run(command, capture_output=True, text=True)
    if result.returncode != 0:
        print(f"Error occurred: {result.stderr}")
    else:
        print("Photoshop script executed successfully")

# 批量处理函数
def batch_replace(template_path, output_folder, data_list):
    for data in data_list:
        image_path = data['image']
        text_content = data['text']

        # 复制模板文件到输出文件夹
        output_file = os.path.join(output_folder, f"{Path(image_path).stem}.psd")
        shutil.copy(template_path, output_file)

        # 打开新创建的PSD文件
        subprocess.run(['open', '-a', 'Photoshop', output_file])  # macOS
        # For Windows, use the following line instead:
        # subprocess.run([r'C:\Program Files\Adobe\Adobe Photoshop 2024\Photoshop.exe', output_file])

        # 等待文件打开
        time.sleep(5)  # 可能需要调整等待时间

        # 调用 Photoshop 脚本进行替换
        run_photoshop_script('replaceContent.jsx', image_path, text_content)

        # 保存并关闭文档
        # 你可以通过添加额外的 Photoshop 脚本来实现这一点,或者使用其他方法确保文件被正确保存和关闭

# 示例数据列表
data_list = [
    {'image': 'path/to/image1.jpg', 'text': 'Text for Image 1'},
    {'image': 'path/to/image2.jpg', 'text': 'Text for Image 2'},
    # Add more entries as needed
]

# 使用函数
batch_replace('path/to/template.psd', 'path/to/output/folder', data_list)

4. 注意点

  • 跨平台兼容性:上面的代码示例假设你是在 macOS 上运行。如果你在 Windows 上,请相应地修改路径和命令。
  • 文件打开延迟:由于 Photoshop 打开文件可能需要一些时间,所以在调用 Photoshop 脚本之前,你可能需要添加适当的延迟(如 time.sleep())以确保文件已经完全加载。
  • 保存和关闭文档:为了确保每个文件都被正确保存和关闭,你可能需要编写额外的 Photoshop 脚本来处理这些操作,或者在 Python 中使用其他方法来监视和管理 Photoshop 的状态。