python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python批量生成psd

python如何批量生成psd

作者:LMY~~

文章总结:如何使用Python批量生成PSD文件,包括安装Python环境和ps的步骤,提供个人经验并鼓励大家支持脚本之家

python批量生成psd

在之前需要安装python环境和ps

来看实例

# -*- coding: utf-8 -*-
import win32com.client
import csv
import os

# 配置区(按需修改)=====================================
CSV_PATH = r'E:\psd\jobs.csv'  # 简历数据路径
PSD_TEMPLATE = r'E:\psd\zhaopin.psd'  # PSD模板路径
OUTPUT_FOLDER = r'E:\psd\output'  # 成品输出目录
TEXT_LAYER_MAP = {  # 图层名称与CSV列名对应关系
    'company': 'company',
    'position': 'position',
    'salary': 'salary'
}


# =====================================================

def main():
    # 创建Photoshop实例
    ps = win32com.client.Dispatch("Photoshop.Application")
    if ps:
        print("成功创建 Photoshop 实例")
    else:
        print("创建 Photoshop 实例失败")

    # 读取CSV数据
    with open(CSV_PATH, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        data = [row for row in reader]

    # 创建输出目录
    os.makedirs(OUTPUT_FOLDER, exist_ok=True)

    # 处理每条数据
    for index, item in enumerate(data, 1):
        # 复制模板文件
        output_psd = os.path.join(OUTPUT_FOLDER, f'招聘_{index}.psd')
        open(PSD_TEMPLATE, 'r')  # 检查模板是否存在
        doc = ps.Open(PSD_TEMPLATE)

        try:
            # 遍历所有图层
            for layer in doc.Layers:
                # 仅处理文本图层
                
                if layer.Kind == 2:  # 2表示文本图层
                    layer_name = layer.Name
                    if layer_name in TEXT_LAYER_MAP:
                        csv_column = TEXT_LAYER_MAP[layer_name]
                        new_text = str(item.get(csv_column, ''))

                        # 中文换行处理(每10个字符换行)
                        if len(new_text) > 10:
                            new_text = '\n'.join([new_text[i:i + 10] for i in range(0, len(new_text), 10)])

                        layer.TextItem.Contents = new_text

            # 导出为PNG
            png_path = output_psd.replace('.psd', '.png')
            export_options = win32com.client.Dispatch('Photoshop.ExportOptionsSaveForWeb')
            export_options.Format = 13  # PNG格式
            export_options.PNG8 = False  # 使用24位PNG
            doc.Export(ExportIn=png_path, ExportAs=2, Options=export_options)

            # 保存PSD
            doc.SaveAs(output_psd)
            print(f'已生成:{output_psd}')

        finally:
            doc.Close(2)  # 关闭文档不保存修改(因为已另存)


if __name__ == '__main__':
    main()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文