如何使用 photoshop-python-api

1,367 阅读9分钟

photoshop-python-api 是一个方便的库,用于通过 Python 操作 Adobe Photoshop。它提供了与 Photoshop 的通信接口,可以执行诸如打开文件、编辑图层、应用滤镜等任务。

以下是关于如何使用 photoshop-python-api 的详细介绍和代码示例。


安装

确保你已安装 Python 和 Photoshop。然后,安装 photoshop-python-api

bashbash:bash
复制代码
pip install photoshop-python-api

此外,Photoshop 的 ExtendScript 扩展必须启用。你可以在 Photoshop 的首选项中启用它。


基础用法

初始化 Photoshop

以下是连接到 Photoshop 的基本代码:

python
复制代码
from photoshop import Session

# 打开一个 Photoshop 会话
with Session() as ps:
    print(f"Connected to Photoshop: {ps.app.name}")

常见任务

1. 打开文件
python
复制代码
from photoshop import Session

with Session() as ps:
    # 打开文件
    file_path = r"C:\path\to\your\image.psd"
    doc = ps.app.open(file_path)
    print(f"Opened document: {doc.name}")
2. 新建文档
python
复制代码
from photoshop import Session

with Session() as ps:
    # 创建新文档
    doc = ps.app.documents.add(width=800, height=600, resolution=72)
    print(f"Created new document: {doc.name}")
3. 操作图层
python
复制代码
from photoshop import Session

with Session() as ps:
    doc = ps.app.activeDocument
    
    # 添加新图层
    layer = doc.artLayers.add()
    layer.name = "My Layer"
    
    # 修改图层属性
    layer.opacity = 50  # 设置透明度为 50%
    print(f"Layer '{layer.name}' created with opacity {layer.opacity}")
4. 应用滤镜
python
复制代码
from photoshop import Session

with Session() as ps:
    doc = ps.app.activeDocument
    layer = doc.activeLayer
    
    # 应用高斯模糊
    ps.app.doJavaScript('app.activeDocument.activeLayer.applyGaussianBlur(5);')
    print(f"Applied Gaussian blur to layer: {layer.name}")
5. 导出文件
python
复制代码
from photoshop import Session

with Session() as ps:
    doc = ps.app.activeDocument
    output_path = r"C:\path\to\output.png"
    
    # 导出为 PNG
    options = ps.PNGSaveOptions()
    doc.saveAs(output_path, options, asCopy=True)
    print(f"Document saved to {output_path}")

使用 ExtendScript 扩展功能

photoshop-python-api 允许直接运行 ExtendScript(Photoshop 的 JavaScript 脚本语言):

python
复制代码
from photoshop import Session

with Session() as ps:
    result = ps.app.doJavaScript('app.version;')
    print(f"Photoshop version: {result}")

高级功能

遍历图层

python
复制代码
from photoshop import Session

with Session() as ps:
    doc = ps.app.activeDocument
    for layer in doc.artLayers:
        print(f"Layer: {layer.name}")

动态修改文本

python
复制代码
from photoshop import Session

with Session() as ps:
    doc = ps.app.activeDocument
    text_layer = doc.artLayers.add()
    text_layer.kind = 2  # 2 表示文本图层
    text_layer.textItem.contents = "Hello Photoshop"
    text_layer.textItem.size = 48
    text_layer.textItem.color = ps.SolidColor()
    text_layer.textItem.color.rgb.red = 255
    print("Added text layer with content: 'Hello Photoshop'")

批量处理文件

python
复制代码
import os
from photoshop import Session

input_folder = r"C:\path\to\input"
output_folder = r"C:\path\to\output"

with Session() as ps:
    for filename in os.listdir(input_folder):
        if filename.endswith(".psd"):
            file_path = os.path.join(input_folder, filename)
            doc = ps.app.open(file_path)
            
            # 修改文件名并保存
            output_path = os.path.join(output_folder, filename.replace(".psd", ".png"))
            options = ps.PNGSaveOptions()
            doc.saveAs(output_path, options, asCopy=True)
            print(f"Processed and saved: {output_path}")
            
            # 关闭文档
            doc.close()

注意事项

  1. 环境依赖: 确保 Photoshop 已安装且运行,并启用 ExtendScript。
  2. 权限问题: 某些操作可能需要管理员权限。
  3. 文件路径: 确保使用正确的路径分隔符(Windows 使用 \r"")。

扩展和改进

如果需要实现更复杂的功能(例如自动设计、批量处理等),可以结合 Photoshop 的 JavaScript API 和 Python 的脚本逻辑,进一步扩展能力。

如果你有特定需求,可以详细说明,我可以为你编写更具体的脚本!

您说:

更多的应用案例

ChatGPT 说:

GPT

以下是更多使用 photoshop-python-api 的实际应用案例,涵盖了各种常见的 Photoshop 操作和自动化脚本的实现。每个案例都包含代码示例和用途说明。


1. 批量添加水印

场景

为一组图片添加公司 Logo 或文字水印。

实现代码

python
复制代码
import os
from photoshop import Session

def add_watermark(input_folder, output_folder, watermark_text="Watermark"):
    with Session() as ps:
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(('.jpg', '.png', '.psd')):
                file_path = os.path.join(input_folder, filename)
                doc = ps.app.open(file_path)
                
                # 添加文字水印
                text_layer = doc.artLayers.add()
                text_layer.kind = 2  # 文本图层
                text_layer.textItem.contents = watermark_text
                text_layer.textItem.size = 24
                text_layer.textItem.position = [doc.width - 200, doc.height - 50]  # 右下角
                text_layer.textItem.color = ps.SolidColor()
                text_layer.textItem.color.rgb.red = 255
                text_layer.textItem.color.rgb.green = 255
                text_layer.textItem.color.rgb.blue = 255
                
                # 保存并导出
                output_path = os.path.join(output_folder, filename)
                options = ps.PNGSaveOptions()
                doc.saveAs(output_path, options, asCopy=True)
                print(f"Processed and saved: {output_path}")
                
                # 关闭文档
                doc.close()

# 输入和输出文件夹
input_folder = r"C:\path\to\input"
output_folder = r"C:\path\to\output"
add_watermark(input_folder, output_folder, "My Watermark")

2. 自动裁剪图片

场景

根据透明边界裁剪图片,去除多余空白区域。

实现代码

python
复制代码
from photoshop import Session

def auto_crop_image(image_path, output_path):
    with Session() as ps:
        doc = ps.app.open(image_path)
        
        # 裁剪图片:选择图层内容的边界
        doc.crop(doc.activeLayer.bounds)
        
        # 保存裁剪后的图片
        options = ps.PNGSaveOptions()
        doc.saveAs(output_path, options, asCopy=True)
        print(f"Cropped and saved: {output_path}")
        doc.close()

# 输入图片路径和输出路径
image_path = r"C:\path\to\input.png"
output_path = r"C:\path\to\output.png"
auto_crop_image(image_path, output_path)

3. 批量调整图片分辨率

场景

为一组图片统一分辨率(例如,修改为 300 DPI 或更小尺寸)。

实现代码

python
复制代码
import os
from photoshop import Session

def batch_resize_images(input_folder, output_folder, resolution=300):
    with Session() as ps:
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(('.jpg', '.png', '.psd')):
                file_path = os.path.join(input_folder, filename)
                doc = ps.app.open(file_path)
                
                # 修改分辨率
                doc.resizeImage(resolution=resolution)
                
                # 保存为新的文件
                output_path = os.path.join(output_folder, filename)
                options = ps.JPEGSaveOptions()
                doc.saveAs(output_path, options, asCopy=True)
                print(f"Resized and saved: {output_path}")
                
                # 关闭文档
                doc.close()

# 输入和输出文件夹
input_folder = r"C:\path\to\input"
output_folder = r"C:\path\to\output"
batch_resize_images(input_folder, output_folder, resolution=300)

4. 自动化 Logo 替换

场景

将设计模板中的公司 Logo 替换为新的 Logo。

实现代码

python
复制代码
from photoshop import Session

def replace_logo(template_path, logo_path, output_path):
    with Session() as ps:
        # 打开模板文件
        doc = ps.app.open(template_path)
        
        # 删除旧 Logo 图层
        for layer in doc.artLayers:
            if "Logo" in layer.name:  # 假设 Logo 图层名称包含 "Logo"
                layer.remove()
        
        # 插入新的 Logo
        logo_doc = ps.app.open(logo_path)
        logo_doc.activeLayer.copy()  # 复制 Logo 图层
        logo_doc.close()
        doc.paste()  # 粘贴到模板
        new_logo_layer = doc.activeLayer
        new_logo_layer.name = "New Logo"
        
        # 调整 Logo 尺寸和位置
        new_logo_layer.resize(50, 50)  # 缩放 50%
        new_logo_layer.translate(doc.width / 2, doc.height / 2)  # 移动到中心
        
        # 保存文件
        options = ps.PSDSaveOptions()
        doc.saveAs(output_path, options)
        print(f"Template updated and saved: {output_path}")
        doc.close()

# 模板路径、Logo 路径和输出路径
template_path = r"C:\path\to\template.psd"
logo_path = r"C:\path\to\logo.png"
output_path = r"C:\path\to\output.psd"
replace_logo(template_path, logo_path, output_path)

5. 图片颜色调整

场景

自动为一组图片应用色调调整,例如改变亮度、对比度或饱和度。

实现代码

python
复制代码
import os
from photoshop import Session

def adjust_colors(image_path, output_path, brightness=20, contrast=10):
    with Session() as ps:
        doc = ps.app.open(image_path)
        
        # 调整亮度和对比度
        adjustment_layer = doc.artLayers.add()
        ps.app.doJavaScript(f"""
        var idbrightnessContrast = stringIDToTypeID("brightnessContrast");
        var desc = new ActionDescriptor();
        desc.putInteger(stringIDToTypeID("brightness"), {brightness});
        desc.putInteger(stringIDToTypeID("contrast"), {contrast});
        executeAction(idbrightnessContrast, desc, DialogModes.NO);
        """)
        
        # 保存文件
        options = ps.PNGSaveOptions()
        doc.saveAs(output_path, options, asCopy=True)
        print(f"Adjusted colors and saved: {output_path}")
        doc.close()

# 输入图片路径和输出路径
image_path = r"C:\path\to\input.jpg"
output_path = r"C:\path\to\output.jpg"
adjust_colors(image_path, output_path, brightness=30, contrast=15)

6. 动态生成批量名片

场景

根据一组人员信息(例如姓名和职位),生成对应的名片图片。

实现代码

python
复制代码
from photoshop import Session

def generate_business_cards(template_path, output_folder, data):
    with Session() as ps:
        for person in data:
            # 打开模板
            doc = ps.app.open(template_path)
            
            # 替换姓名和职位
            for layer in doc.artLayers:
                if layer.name == "Name":
                    layer.textItem.contents = person["name"]
                elif layer.name == "Title":
                    layer.textItem.contents = person["title"]
            
            # 保存为新的文件
            output_path = os.path.join(output_folder, f"{person['name']}_card.png")
            options = ps.PNGSaveOptions()
            doc.saveAs(output_path, options, asCopy=True)
            print(f"Business card saved: {output_path}")
            doc.close()

# 名片模板路径和人员数据
template_path = r"C:\path\to\business_card_template.psd"
output_folder = r"C:\path\to\output"
data = [
    {"name": "Alice", "title": "Manager"},
    {"name": "Bob", "title": "Engineer"},
]
generate_business_cards(template_path, output_folder, data)

如果你有其他需求或更复杂的场景需求,请告诉我,我可以进一步扩展代码!

您说:

有没有更高级的完法

ChatGPT 说:

GPT

更高级的用法可以结合 Photoshop Scripting API动态数据生成机器学习技术复杂的操作逻辑,实现智能化、自动化的 Photoshop 操作。以下是几个高级案例及其实现思路:


高级玩法案例

1. 基于 AI 的图片增强和自动修复

结合 Python 的机器学习库(如 TensorFlow、PyTorch)和 Photoshop 的 API,可以实现图像智能化处理。例如:

  • 使用深度学习模型对图片去噪。
  • 利用 Photoshop 的功能微调 AI 处理后的图像。
实现思路
  1. 使用 Python 的机器学习模型处理图片(如去噪、修复、风格迁移)。
  2. 将结果图片传递给 Photoshop,通过 photoshop-python-api 进行后处理。
示例代码
python
复制代码
import cv2
from photoshop import Session

def enhance_and_refine(image_path, output_path):
    # AI 增强图片(使用 OpenCV 进行简单去噪作为示例)
    image = cv2.imread(image_path)
    denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)
    temp_path = "temp_denoised.png"
    cv2.imwrite(temp_path, denoised_image)

    # 用 Photoshop 进一步处理
    with Session() as ps:
        doc = ps.app.open(temp_path)
        # 应用锐化滤镜
        ps.app.doJavaScript('app.activeDocument.activeLayer.applySharpen();')
        # 保存最终结果
        options = ps.PNGSaveOptions()
        doc.saveAs(output_path, options, asCopy=True)
        print(f"Enhanced and saved: {output_path}")
        doc.close()

# 使用该功能
enhance_and_refine("input.jpg", "output.jpg")

2. 动态生成海报或广告模板

创建动态广告:根据用户输入(如产品名称、图片、价格),自动生成一个海报或广告图片。

实现思路
  1. 准备 Photoshop 模板,预定义占位符图层(如 "Product Image", "Product Name", "Price")。
  2. 使用 photoshop-python-api 自动替换这些占位符内容。
  3. 可生成多种布局或配色方案。
示例代码
python
复制代码
from photoshop import Session

def generate_ad(template_path, output_path, product_info):
    with Session() as ps:
        doc = ps.app.open(template_path)

        # 替换产品名称
        for layer in doc.artLayers:
            if layer.name == "Product Name":
                layer.textItem.contents = product_info["name"]
            elif layer.name == "Price":
                layer.textItem.contents = f"${product_info['price']}"

        # 替换产品图片
        product_image = ps.app.open(product_info["image_path"])
        product_image.activeLayer.copy()
        product_image.close()
        doc.paste()
        pasted_layer = doc.activeLayer
        pasted_layer.name = "Product Image"
        pasted_layer.resize(80, 80)  # 缩放

        # 保存最终广告
        options = ps.PNGSaveOptions()
        doc.saveAs(output_path, options, asCopy=True)
        print(f"Generated ad saved: {output_path}")
        doc.close()

# 示例:产品信息
product_info = {
    "name": "Cool Gadget",
    "price": 49.99,
    "image_path": "product.jpg",
}
generate_ad("ad_template.psd", "ad_output.png", product_info)

3. Photoshop + 数据可视化

动态生成图片并在 Photoshop 中嵌入复杂的数据可视化(例如市场趋势图、统计数据)。

实现思路
  1. 使用 Python 的 Matplotlib 或 Seaborn 库生成可视化图片。
  2. 将图表传递给 Photoshop,作为一层嵌入到设计中。
  3. 可批量生成多张报告图片。
示例代码
python
复制代码
import matplotlib.pyplot as plt
from photoshop import Session

def create_chart(data, chart_path):
    # 使用 Matplotlib 生成图表
    plt.figure(figsize=(8, 6))
    plt.bar(data.keys(), data.values(), color='skyblue')
    plt.title("Sales Data")
    plt.xlabel("Month")
    plt.ylabel("Sales")
    plt.savefig(chart_path)
    plt.close()

def integrate_chart(template_path, chart_path, output_path):
    with Session() as ps:
        doc = ps.app.open(template_path)

        # 添加图表图片
        chart_image = ps.app.open(chart_path)
        chart_image.activeLayer.copy()
        chart_image.close()
        doc.paste()
        pasted_layer = doc.activeLayer
        pasted_layer.name = "Chart"
        pasted_layer.resize(80, 80)  # 调整大小

        # 保存最终结果
        options = ps.PNGSaveOptions()
        doc.saveAs(output_path, options, asCopy=True)
        print(f"Report saved: {output_path}")
        doc.close()

# 示例数据
data = {"Jan": 200, "Feb": 240, "Mar": 300, "Apr": 280}
chart_path = "chart.png"
template_path = "report_template.psd"
output_path = "final_report.png"

create_chart(data, chart_path)
integrate_chart(template_path, chart_path, output_path)

4. 复杂批量处理与智能布局

对多个输入图片进行不同的裁剪、滤镜应用,并将结果按指定布局组合成一个拼贴图。

实现思路
  1. 使用 Photoshop 的裁剪和滤镜工具处理图片。
  2. 动态计算布局并合并图片。
  3. 保存最终拼贴图。
示例代码
python
复制代码
from photoshop import Session

def create_collage(image_paths, output_path, grid_size=(2, 2)):
    with Session() as ps:
        # 创建新文档
        doc = ps.app.documents.add(width=1000, height=1000, resolution=72)
        
        # 动态计算每张图片的位置
        cell_width = doc.width / grid_size[0]
        cell_height = doc.height / grid_size[1]
        
        for i, image_path in enumerate(image_paths):
            image_doc = ps.app.open(image_path)
            image_doc.activeLayer.copy()
            image_doc.close()
            
            # 粘贴图片
            doc.paste()
            pasted_layer = doc.activeLayer
            x = (i % grid_size[0]) * cell_width
            y = (i // grid_size[0]) * cell_height
            pasted_layer.translate(x, y)
            pasted_layer.resize(cell_width / pasted_layer.bounds[2], 
                                cell_height / pasted_layer.bounds[3])
        
        # 保存拼贴图
        options = ps.PNGSaveOptions()
        doc.saveAs(output_path, options, asCopy=True)
        print(f"Collage saved: {output_path}")
        doc.close()

# 图片路径列表
image_paths = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg"]
output_path = "collage.png"
create_collage(image_paths, output_path, grid_size=(2, 2))

5. 智能照片风格迁移

  • 结合深度学习模型(如 PyTorch 实现的 Neural Style Transfer)和 Photoshop API 实现照片风格迁移。
  • Photoshop 负责后续的微调和效果增强。

下一步扩展

  • 云端处理: 将生成任务部署到服务器,结合云存储(如 AWS S3)批量生成和存储图片。
  • 智能推荐: 利用机器学习分析设计元素(如颜色、布局)自动推荐设计模板。
  • 增强脚本交互: 使用 Flask 或 FastAPI 构建一个 Web 接口,与 photoshop-python-api 集成,实现远程操作 Photoshop。

如果你想深入探讨某一具体功能或需要结合更多技术,请告诉我!

您说:

需要更多的案例

ChatGPT 说:

GPT

以下是更多高级 Photoshop 自动化操作的案例,这些操作结合了 photoshop-python-api 和其他 Python 库,实现复杂任务和功能:


案例 6:批量生成社交媒体内容

场景

为不同社交媒体平台(如 Instagram、Facebook、Twitter)生成指定尺寸的内容,例如广告或活动预告。

实现代码

python
复制代码
from photoshop import Session

def generate_social_media_content(template_path, output_folder, sizes):
    """根据不同社交媒体的要求生成多种尺寸的内容"""
    with Session() as ps:
        doc = ps.app.open(template_path)
        for platform, size in sizes.items():
            # 修改文档尺寸
            doc.resizeImage(width=size[0], height=size[1])
            
            # 保存文件
            output_path = f"{output_folder}/{platform}_content.png"
            options = ps.PNGSaveOptions()
            doc.saveAs(output_path, options, asCopy=True)
            print(f"Generated content for {platform}: {output_path}")
        doc.close()

# 示例社交媒体尺寸
sizes = {
    "Instagram": (1080, 1080),
    "Facebook": (1200, 628),
    "Twitter": (1024, 512),
    "LinkedIn": (1200, 1200),
}
template_path = "template.psd"
output_folder = "social_media_output"
generate_social_media_content(template_path, output_folder, sizes)

案例 7:批量去背景

场景

对一组图片批量去除背景(透明化),然后导出为 PNG 格式。

实现代码

python
复制代码
from photoshop import Session

def remove_background(input_folder, output_folder):
    """批量去除图片背景"""
    with Session() as ps:
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(('.jpg', '.png')):
                file_path = os.path.join(input_folder, filename)
                doc = ps.app.open(file_path)

                # 执行去背景命令
                ps.app.doJavaScript('''
                    var doc = app.activeDocument;
                    doc.activeLayer.isBackgroundLayer = false;
                    doc.selection.selectAll();
                    doc.selection.clear();
                ''')
                
                # 保存结果
                output_path = os.path.join(output_folder, filename)
                options = ps.PNGSaveOptions()
                doc.saveAs(output_path, options, asCopy=True)
                print(f"Background removed: {output_path}")
                doc.close()

# 输入和输出文件夹
input_folder = "images_to_process"
output_folder = "output_images"
remove_background(input_folder, output_folder)

案例 8:自动生成证书

场景

从 CSV 文件中读取姓名并生成对应的电子证书。

实现代码

python
复制代码
import csv
from photoshop import Session

def generate_certificates(template_path, output_folder, csv_file):
    """批量生成证书"""
    with open(csv_file, 'r') as file:
        reader = csv.DictReader(file)
        with Session() as ps:
            for row in reader:
                doc = ps.app.open(template_path)

                # 替换姓名
                for layer in doc.artLayers:
                    if layer.name == "Name":
                        layer.textItem.contents = row['Name']

                # 保存证书
                output_path = f"{output_folder}/{row['Name']}_certificate.png"
                options = ps.PNGSaveOptions()
                doc.saveAs(output_path, options, asCopy=True)
                print(f"Certificate saved: {output_path}")
                doc.close()

# 使用案例
template_path = "certificate_template.psd"
output_folder = "certificates"
csv_file = "names.csv"  # CSV 文件需包含 "Name" 列
generate_certificates(template_path, output_folder, csv_file)

案例 9:自动化产品目录设计

场景

从数据库或 JSON 文件中读取产品信息,生成设计好的产品展示页面。

实现代码

python
复制代码
import json
from photoshop import Session

def create_product_catalog(template_path, output_path, products):
    """根据产品信息生成产品目录"""
    with Session() as ps:
        doc = ps.app.open(template_path)

        for i, product in enumerate(products):
            # 动态替换产品信息
            for layer in doc.artLayers:
                if layer.name == f"Product {i+1} Name":
                    layer.textItem.contents = product['name']
                elif layer.name == f"Product {i+1} Price":
                    layer.textItem.contents = f"${product['price']}"
                elif layer.name == f"Product {i+1} Image":
                    # 插入产品图片
                    product_image = ps.app.open(product['image_path'])
                    product_image.activeLayer.copy()
                    product_image.close()
                    doc.paste()
                    pasted_layer = doc.activeLayer
                    pasted_layer.name = f"Product {i+1} Image"
                    pasted_layer.translate(100 * i, 200)  # 调整位置

        # 保存目录
        options = ps.PSDSaveOptions()
        doc.saveAs(output_path, options)
        print(f"Product catalog saved: {output_path}")
        doc.close()

# 示例产品信息
products = [
    {"name": "Product 1", "price": 19.99, "image_path": "product1.jpg"},
    {"name": "Product 2", "price": 29.99, "image_path": "product2.jpg"},
    {"name": "Product 3", "price": 39.99, "image_path": "product3.jpg"},
]
template_path = "catalog_template.psd"
output_path = "product_catalog.psd"
create_product_catalog(template_path, output_path, products)

案例 10:复杂效果自动应用(批量滤镜+水印)

场景

对图片批量应用滤镜(如模糊、锐化、色调调整),并在其上叠加水印。

实现代码

python
复制代码
from photoshop import Session

def apply_effects_and_watermark(input_folder, output_folder, watermark_text):
    """批量应用效果并添加水印"""
    with Session() as ps:
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(('.jpg', '.png')):
                file_path = os.path.join(input_folder, filename)
                doc = ps.app.open(file_path)

                # 应用滤镜(高斯模糊 + 锐化)
                ps.app.doJavaScript('app.activeDocument.activeLayer.applyGaussianBlur(5);')
                ps.app.doJavaScript('app.activeDocument.activeLayer.applySharpen();')

                # 添加水印
                watermark_layer = doc.artLayers.add()
                watermark_layer.kind = 2  # 文本图层
                watermark_layer.textItem.contents = watermark_text
                watermark_layer.textItem.size = 20
                watermark_layer.textItem.position = [doc.width - 150, doc.height - 50]
                watermark_layer.textItem.color = ps.SolidColor()
                watermark_layer.textItem.color.rgb.red = 255
                watermark_layer.textItem.color.rgb.green = 255
                watermark_layer.textItem.color.rgb.blue = 255

                # 保存处理后的图片
                output_path = os.path.join(output_folder, filename)
                options = ps.PNGSaveOptions()
                doc.saveAs(output_path, options, asCopy=True)
                print(f"Processed and saved: {output_path}")
                doc.close()

# 使用案例
input_folder = "images_to_process"
output_folder = "output_images"
apply_effects_and_watermark(input_folder, output_folder, "My Watermark")

案例 11:智能化名片批量生成

场景

根据员工信息批量生成多种风格的名片,并动态选择 Logo 和配色。

实现思路

  • 动态选择模板样式。
  • 根据员工数据(如姓名、职位、联系方式)生成不同风格的名片。
  • 可以批量输出 PDF。

示例代码

python
复制代码
import os
from photoshop import Session

def generate_business_cards(template_folder, output_folder, employee_data):
    """批量生成名片"""
    with Session() as ps:
        for employee in employee_data:
            template_path = os.path.join(template_folder, f"{employee['template']}.psd")
            doc = ps.app.open(template_path)

            # 替换姓名、职位和联系方式
            for layer in doc.artLayers:
                if layer.name == "Name":
                    layer.textItem.contents = employee['name']
                elif layer.name == "Title":
                    layer.textItem.contents = employee['title']
                elif layer.name == "Contact":
                    layer.textItem.contents = employee['contact']

            # 保存名片
            output_path = os.path.join(output_folder, f"{employee['name']}_card.png")
            options = ps.PNGSaveOptions()
            doc.saveAs(output_path, options, asCopy=True)
            print(f"Generated business card: {output_path}")
            doc.close()

# 示例员工数据
employee_data = [
    {"name": "Alice", "title": "Manager", "contact": "alice@company.com", "template": "template1"},
    {"name": "Bob", "title": "Developer", "contact": "bob@company.com", "template": "template2"},
]
template_folder = "card_templates"
output_folder = "business_cards"
generate_business_cards(template_folder, output_folder, employee_data)

如果你还有更多的特定需求或想进一步优化某些功能,可以告诉我,我可