ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

如何用 Python 操控 Photoshop?自动化修图与批量设计入门指南

2026/8/13 13:24:34 拓冰建站 浏览量
如何用 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.后面跟的SolidColorLayerKindJPEGSaveOptions都是封装好的 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.pysmart_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 个坑与避坑清单

把这几个坑提前说清楚,能帮你少走很多弯路:

  1. 忘记先打开 Photoshop。这是最常见的报错来源,脚本连不上 COM 对象会直接抛异常。先开 PS,再跑脚本。
  2. 版本不匹配。官方测试覆盖了 Photoshop 2017 到 2025 的版本,但不同版本 API 可能略有差异。遇到诡异问题时,用Session(ps_version="2022")之类的参数显式指定版本。
  3. 操作完图层对象"失效"。PS 的图层对象在某些操作后会失效,比如执行了替换内容、删除等操作。稳妥的做法是操作后再重新获取一次activeLayer或对应图层引用。
  4. 路径问题。Windows 下建议使用绝对路径,注意反斜杠转义;涉及中文路径时,必要时先转成标准路径再传给 API。
  5. 报错信息看不懂。库把 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.pyexamples/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),仅供参考