如何使用Python调用Photoshop并向已创建的PSD模板添加用户输入数据?及解决打开PSD文件时的COM错误
解决Python调用Photoshop时的
Illegal argument - argument 1错误 嘿,这个错误我之前也碰到过!根源很明确:你的文件路径格式不对,Photoshop的COM接口没办法正确解析你传入的路径字符串,所以才会提示“需要一个指向现有文件/文件夹的引用”。
Windows系统里的反斜杠\在Python中是转义字符,直接写"D:\Coding..."的话,Python会把部分反斜杠和后面的字符当成转义序列处理,导致实际传递给Photoshop的路径和你想的不一样,自然找不到文件。
具体修复方案
1. 修正路径的三种方法
你只需要把路径改成以下三种格式之一就行:
- 原始字符串:在路径前加
r,告诉Python不要解析反斜杠(最推荐,写法简洁) - 正斜杠替代:把所有
\换成/(Photoshop完全支持正斜杠路径) - 双反斜杠转义:用
\\代替单个\,手动转义每个反斜杠
修改后的Open方法调用示例(选一种就好):
# 方式1:原始字符串 psApp.Open(r"D:\Coding\Python Scripts\Dr Nikhil Prescription App\Prescription Generator\Presc_Template.psd") # 方式2:正斜杠 psApp.Open("D:/Coding/Python Scripts/Dr Nikhil Prescription App/Prescription Generator/Presc_Template.psd") # 方式3:双反斜杠 psApp.Open("D:\\Coding\\Python Scripts\\Dr Nikhil Prescription App\\Prescription Generator\\Presc_Template.psd")
2. 加个路径验证更稳妥
为了避免后续再踩路径的坑,建议在打开文件前先检查路径是否存在,这样能快速定位问题:
import os psd_path = r"D:\Coding\Python Scripts\Dr Nikhil Prescription App\Prescription Generator\Presc_Template.psd" if os.path.exists(psd_path): psApp.Open(psd_path) else: print(f"Error: 找不到文件!路径是:{psd_path}")
3. 给你后续自动化流程的小提示
针对你从CSV读数据生成图片的需求,还有几个关键点要注意:
- 确保代码里的图层名称
"Layer"和Photoshop模板里的图层名称完全一致(包括大小写,Photoshop的图层名是区分大小写的) - 修改完文本后,记得保存或导出成品图,比如用
doc.SaveAs()保存PSD,或者用doc.Export()导出成PNG/JPG - 打包程序时别用硬编码的绝对路径!可以用
os.path.dirname(__file__)获取程序所在目录,再拼接模板路径,这样不管程序放哪都能找到模板:
import os # 获取当前脚本/程序所在的目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接模板路径 psd_path = os.path.join(current_dir, "Presc_Template.psd")
完整修正后的代码示例
import win32com.client import os # 获取程序所在目录,避免硬编码绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) psd_path = os.path.join(current_dir, "Presc_Template.psd") psApp = win32com.client.Dispatch("Photoshop.Application") # 先验证路径再操作 if os.path.exists(psd_path): psApp.Open(psd_path) doc = psApp.ActiveDocument # 注意:这里的图层名称要和模板里的完全一致! layer_facts = doc.ArtLayers["Layer"] text_of_layer = layer_facts.TextItem text_of_layer.contents = "This is a test." # 示例:导出为PNG图片 export_path = os.path.join(current_dir, "output_prescription.png") # 用Photoshop的常量指定导出格式 doc.Export(ExportPath=export_path, ExportType=win32com.client.constants.PNG) # 可选:关闭文档,根据需求决定是否保存更改 doc.Close(SaveChanges=True) else: print(f"错误:未找到PSD模板文件,请检查路径:{psd_path}")
内容的提问来源于stack exchange,提问作者Deven Jain




