如何用 Python 操控 Photoshop?自动化修图与批量设计入门指南
如何用 Python 操控 Photoshop?自动化修图与批量设计入门指南
【免费下载链接】photoshop-python-apiPython API for Photoshop.项目地址: https://gitcode.com/gh_mirrors/ph/photoshop-python-api
周三晚上十点,设计师小张盯着屏幕上的 50 张 banner 发呆:客户要统一换 logo、改一句文案、重新导出三种尺寸。他已经在 Photoshop 里机械地重复了快两个小时,手酸、眼涩、心里在骂人。其实他手边就有解决方案——photoshop-python-api,一个用 Python 给 Photoshop 装上"遥控器"的开源库。把重复操作写成脚本,剩下的时间用来喝咖啡。
这篇文章不打算按部就班地给你念说明书,而是从"我到底能用它干什么"出发,带你用几个真实场景把它跑起来。读完之后,你至少能写出第一个属于自己的 PS 自动化脚本。
photoshop-python-api 到底是什么:给 Photoshop 装一个 Python 遥控器
一句话概括:它是一个用 Python 语言操控 Adobe Photoshop 的接口库。你的 Python 代码通过 Windows 的 COM 机制连接到本机正在运行的 Photoshop,然后像操作遥控器一样,让 PS 帮你建文档、加图层、改颜色、存文件。
也因此有一个重要前提:这个库目前只支持 Windows 平台。如果你用 macOS,可以暂时观望,但如果你在用 Windows,那今天的内容基本都能照做。
它和"动作录制""JS 脚本"有什么不一样?
很多人的第一反应是:PS 自带动作面板,录一遍不就完事了吗?还能用 JavaScript 写脚本,为什么还要 Python?简单对比一下:
| 方案 | 上手难度 | 灵活性 | 适合场景 |
|---|---|---|---|
| PS 动作录制 | 最低 | 差,只能线性回放 | 固定流程、一次性任务 |
| JS 脚本(ExtendScript) | 中等 | 较强,但要学专门的脚本语言 | 复杂 PS 内部逻辑 |
| photoshop-python-api | 低(会 Python 就行) | 最强,能接文件系统、数据库、爬虫 | 批量处理、自动化流水线 |
最大的优势在于:Python 生态里的一切都能为你所用。比如你用os遍历文件夹里的 200 张图片,用requests下载素材,再用这个库丢给 Photoshop 处理——整个链路写在一个脚本里,一气呵成。
3 分钟跑通第一个脚本:安装、连接、生成图片
第一步:安装
用 pip 一行搞定:
pip install photoshop_python_api第二步:启动 Photoshop
没错,脚本执行时 Photoshop 必须处于打开状态。它扮演的角色是"远程控制的服务器",Python 只是发指令的客户端。
第三步:写一个 Hello World
项目提供了两种写法,我推荐从更省心的Session会话式写法开始:
from photoshop import Session with Session(action="new_document") as ps: doc = ps.active_document # 配置一个亮绿色文字 text_color = ps.SolidColor() text_color.rgb.green = 255 # 新建文字图层 text_layer = doc.artLayers.add() text_layer.kind = ps.LayerKind.TextLayer text_layer.textItem.contents = "Hello, Photoshop API!" text_layer.textItem.position = [120, 180] text_layer.textItem.size = 48 text_layer.textItem.color = text_color # 另存为 JPG jpg_path = "d:/hello_ps.jpg" options = ps.JPEGSaveOptions(quality=8) doc.saveAs(jpg_path, options, asCopy=True)跑完这一段,你的磁盘上就多了一张写着绿色文字的 JPG。with Session(...)会自动帮你处理连接和退出,ps.后面跟的SolidColor、LayerKind、JPEGSaveOptions都是封装好的 PS 对象,读起来很像在操作 PS 本身。
三个真实场景,看懂它的能力边界
光会写文字图层还不够,来看看它真正值钱的地方:批量、重复、流水线。
场景一:批量把 PSD 图层导出为 PNG 图片
电商设计经常要"一个 PSD,所有图层各导出一张图"。手动做要逐个开开关关图层,很磨人。用库里的思路(参考examples/export_layers_as_png.py)可以这样写:
from photoshop import Session with Session() as ps: doc = ps.active_document # 先记录所有图层的初始可见状态 visibilities = [layer.visible for layer in doc.layers] for layer in doc.layers: layer.visible = False try: for i, layer in enumerate(doc.layers): layer.visible = True # 只显示当前这一层 options = ps.PNGSaveOptions() doc.saveAs(f"d:/export/layer_{i}_{layer.name}.png", options, True) layer.visible = False finally: # 无论成败,最后都恢复图层状态 for layer, visible in zip(doc.layers, visibilities): layer.visible = visible注意try...finally的用法:万一中途报错,也要把图层可见性还原回去,不能把用户的 PSD 搞乱。
场景二:一行代码给图片加滤镜和锐化
滤镜不用再靠"滤镜菜单 + 调参 + 预览"了。apply_filters.py和smart_sharpen.py演示了如何用代码精确控制参数:
from photoshop import Session with Session() as ps: doc = ps.active_document layer = doc.activeLayer # 高斯模糊 blur = ps.GaussianBlurOptions() blur.radius = 10.0 layer.applyGaussianBlur(blur) # 智能锐化,参数全部可调 sharp = ps.SmartSharpenOptions() sharp.amount = 120.0 sharp.radius = 3.0 sharp.noiseReduction = 20 sharp.moreAccurate = True layer.applySmartSharpen( amount=sharp.amount, radius=sharp.radius, noiseReduction=sharp.noiseReduction, moreAccurate=sharp.moreAccurate, )同一套参数可以套在几百张图上,效果完全一致——这对"保证输出风格统一"来说是刚需。
场景三:批量执行 Photoshop 预设动作
如果你已经有录制好的 PS 动作(Action),也能直接用代码批量调用,参考run_batch.py:
from photoshop import Session with Session() as ps: options = ps.BatchOptions() options.destination = 3 options.destinationFolder = "d:/output" ps.app.batch( files=your_file_list, # 一个文件路径列表 actionName="Quadrant Colors", # 动作名 actionSet="Default Actions", # 动作组名 options=options, )your_file_list完全可以用os.listdir()生成,这就把"批量处理一个文件夹"串起来了。
Session 进阶玩法:打开、新建、复制文档一条龙
前面一直在说Session,但它的action参数其实还藏着不少便利功能。看photoshop/session.py源码就能发现,Session 支持三种内置动作:
action="new_document":进入会话时自动新建一个文档action="open":配合file_path参数,自动打开指定 PSD 文件action="document_duplicate":复制当前活动文档
比如处理一个已有的 PSD,可以这样写:
from photoshop import Session with Session("d:/design/source.psd", action="open", auto_close=True) as ps: ps.active_document.trim(ps.TrimType.TopLeftPixel, True, True, True, True) ps.active_document.save()auto_close=True表示退出会话时自动关闭文档,避免开着太多窗口。另外还可以传ps_version参数指定 PS 版本,以及callback在会话结束时执行自定义逻辑——如果你将来要写更复杂的工具,这几个参数会很有用。
新手最常踩的 5 个坑与避坑清单
把这几个坑提前说清楚,能帮你少走很多弯路:
- 忘记先打开 Photoshop。这是最常见的报错来源,脚本连不上 COM 对象会直接抛异常。先开 PS,再跑脚本。
- 版本不匹配。官方测试覆盖了 Photoshop 2017 到 2025 的版本,但不同版本 API 可能略有差异。遇到诡异问题时,用
Session(ps_version="2022")之类的参数显式指定版本。 - 操作完图层对象"失效"。PS 的图层对象在某些操作后会失效,比如执行了替换内容、删除等操作。稳妥的做法是操作后再重新获取一次
activeLayer或对应图层引用。 - 路径问题。Windows 下建议使用绝对路径,注意反斜杠转义;涉及中文路径时,必要时先转成标准路径再传给 API。
- 报错信息看不懂。库把 COM 错误封装成了自己的异常类型(
photoshop/api/errors.py),学会捕获errors.PhotoshopPythonAPIError,排查效率会高很多。
写在最后:从复制示例到写出你自己的第一个脚本
回到开头的小张。现在他只需要写一个十几行的脚本:遍历文件夹 → 打开 PSD → 替换 logo → 改文案 → 导出三个尺寸 → 关闭。50 张图几分钟跑完,剩下的时间他真的可以去喝咖啡了。
这个项目最友好的一点,是examples/目录下躺着 30 多个现成脚本:裁剪、旋转、导出画板、替换图片、执行 JavaScript、添加图层样式……几乎每个常见需求都能找到对应的参考。想动手的话:
git clone https://gitcode.com/gh_mirrors/ph/photoshop-python-api cd photoshop-python-api然后翻一翻examples/hello_world.py和examples/export_layers_as_png.py,改几个参数跑一遍,你就完成了从"看教程"到"写脚本"的跨越。
记住一句话:凡是你在 PS 里重复做过两遍以上的操作,都值得交给 Python。现在,打开 Photoshop,跑起你的第一个脚本吧。
【免费下载链接】photoshop-python-apiPython API for Photoshop.项目地址: https://gitcode.com/gh_mirrors/ph/photoshop-python-api
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考