在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

用 photoshop-python-api 把“重复修图“变成一段可运行的代码

用 photoshop-python-api 把“重复修图“变成一段可运行的代码 用 photoshop-python-api 把重复修图变成一段可运行的代码【免费下载链接】photoshop-python-apiPython API for Photoshop.项目地址: https://gitcode.com/gh_mirrors/ph/photoshop-python-api你一定见过这样的画面设计师对着同一张主视觉一晚上改了 40 处文字、导出 12 个尺寸、再挨个检查图层有没有漏——鼠标点得发烫脖子越伸越长。photoshop-python-api 这个开源项目就是为这种场景准备的它把 Adobe Photoshop 的操作封装成 Python 接口让文档创建、图层编辑、颜色设置、批量导出都能用几行代码完成把手工作坊升级成自动化流水线。一个真实场景为什么我要给 Photoshop 写外挂我认识一位做电商详情页的运营每天的工作高度重复打开模板 PSD → 改价格数字 → 换产品图 → 导出 JPG → 重复三十次。她不是不会用 Photoshop恰恰相反她太熟练了熟练到每个动作都快成了肌肉记忆。可问题恰恰出在熟练上——人越是熟练重复劳动消耗的精力越隐蔽。她的诉求很简单能不能让电脑替我做这些事她不需要会写复杂的程序她需要的是一个遥控器把 Photoshop 里的每个按钮翻译成一句话。photoshop-python-api 干的正是这件事。这个项目定位很纯粹Python API for Photoshop。它的底层通过 Windows COM 协议与 Photoshop 进程对话相当于在你的 Python 代码和 PS 软件之间架了一条双向通道。适合三类人设计师/运营批量改稿、批量导出把时间留给真正需要审美的环节Python 开发者把 PS 当作图像处理流水线的一环接进自己的自动化脚本测试与运维用代码生成统一规范的测试素材保证每次输出一致。手工操作 vs 代码自动化差距藏在可重复三个字里我们不妨把同一件事的两个版本摆在一起看给一张图加一个红色文字图层并导出。对比维度手工操作 Photoshop用 photoshop-python-api执行方式鼠标 快捷键一步一停脚本一次跑完with Session()进出可重复性每次手动容易手抖出错同一脚本结果永远一致可追溯操作记录在历史记录里难复用代码即文档改一行参数即可批量能力100 张图要操作 100 次循环 100 次代码只有几行交接成本靠口述我是这么点的把 .py 文件发给同事就能跑差别不在快而在确定性。手工操作最大的成本不是时间是每次都不一样带来的返工。代码自动化之后你的经验被固化成了脚本这比任何操作截图都有说服力。环境要求门槛比想象中低但有一条硬性红线先泼一盆冷水把最关键的限制说在前面这个库只支持 Windows 平台。原因在于它依赖 COMComponent Object Model技术连接 Photoshop而 COM 是 Windows 的原生能力。macOS 和 Linux 用户目前无法直接使用——这是项目 README 里明确标注的 ⚠️ 提示也是新手最容易踩的第一个坑。满足这条硬性红线后其余要求都很宽松系统WindowsCOM 可用即可Photoshop2017 及以上版本社区测试覆盖到 2025越新兼容性越好Python3.8 及以上项目pyproject.toml声明支持 3.8 到 3.12安装有两种路径。如果你只想当作工具用一行 pip 命令即可pip install photoshop_python_api如果你想看源码、跑官方示例可以克隆完整仓库git clone https://gitcode.com/gh_mirrors/ph/photoshop-python-api依赖会自动带上comtypes这个 COM 通信库不需要手动装别的。装完之后记得先启动 Photoshop 并完成登录激活再跑测试代码——库只是遥控器PS 本身得先开机。三个核心能力文档、图层、颜色正好是日常工作的三块积木你可以把photoshop-python-api的能力想象成搭积木photoshop/api/_document.py是画布文档管理_artlayer.py和_artlayers.py是积木块图层操作photoshop/api/colors/目录下的rgb.py、cmyk.py、hsb.py等是颜料颜色处理。文档管理ps.app.documents.add(width1920, height1080, resolution72, name...)一行代码创建指定尺寸的新文档Session(xxx.psd, actionopen)进入会话时自动打开现有文件参考examples/open_psd.py。保存时按格式选对应的选项类JPG 用JPEGSaveOptionsPNG 用PNGSaveOptions它们在photoshop/api/save_options/目录下各有一个模块。图层操作新增图层、改透明度、设混合模式、移动层级、建图层组doc.layerSets.add()几乎覆盖你在图层面板里能点到的所有操作。examples/operate_layerSet.py演示了如何把图层装进分组就像在 PS 里整理图层文件夹一样。颜色处理用ps.SolidColor()创建颜色对象再分别设置.rgb、.cmyk、.hsb分量examples/color.py还演示了把颜色设为前景色和背景色。颜色模型之间可以自由切换打印排版要 CMYK屏幕预览要 RGB一个对象搞定。第一个自动化脚本让 PS 替你打一行字下面这段代码改编自官方examples/hello_world.py每行都有注释新手也能读明白# 导入会话管理类整个脚本的入口钥匙 from photoshop import Session # 用 with 语句进入会话脚本结束后自动释放与 PS 的连接 with Session() as ps: # 在 Photoshop 里新建一个默认尺寸的文档画布 doc ps.app.documents.add() # 创建纯色对象用来定义文字的颜色 text_color ps.SolidColor() text_color.rgb.red 255 # 红色分量拉满 text_color.rgb.green 0 # 绿色分量归零 text_color.rgb.blue 0 # 蓝色分量归零 → 得到一个纯红色 # 在文档中新增一个图层 new_text_layer doc.artLayers.add() # 把图层类型指定为文字图层 new_text_layer.kind ps.LayerKind.TextLayer # 通过 textItem 属性设置文字内容、位置和字号 new_text_layer.textItem.contents Hello, World! # 文字内容 new_text_layer.textItem.position [160, 167] # 画布上的坐标 new_text_layer.textItem.size 40 # 字号 40 new_text_layer.textItem.color text_color # 应用红色 # 配置 JPG 保存参数质量 0~12越大画质越好 options ps.JPEGSaveOptions(quality12) # 保存为 JPGasCopyTrue 表示另存一份副本不覆盖原文档 doc.saveAs(hello_photoshop.jpg, options, asCopyTrue)跑完之后项目目录下会多出一张写着红色 Hello, World! 的 JPG。你刚才完成的其实就是把新建文档 → 打字 → 调色 → 导出这一串手工动作变成了一次性的代码。从此改字号就改一个数字改位置就改一个坐标。第二个脚本把 30 个图层一次导出成 30 张 PNG单层操作只是热身批量才是自动化的主菜。下面这段改编自examples/export_layers_as_png.py解决的是把 PSD 里每个图层分别导出为透明背景 PNG这个高频需求# 导入标准库和会话类 import os from photoshop import Session with Session() as ps: # 获取当前处于活动状态的文档 doc ps.active_document # 先把所有图层记下可见状态并全部隐藏 # 这样后面逐个显示时其余图层不会穿帮 layer_visibilities [] for layer in doc.layers: layer_visibilities.append(layer.visible) layer.visible False try: # 遍历每个图层逐个导出 for i, layer in enumerate(doc.layers): layer.visible True # 只显示当前这一个图层 options ps.PNGSaveOptions() # 配置 PNG 导出参数 options.interlaced False # 不使用隔行扫描兼容性更好 # 用序号_图层名.png命名避免重名覆盖 file_path os.path.join( os.path.dirname(__file__), # 保存到脚本所在目录 flayer_{i}_{layer.name}.png ) doc.saveAs(file_path, options, True) # 第三个参数 True 表示另存副本 layer.visible False # 导完再隐藏轮到下一个 finally: # 无论中途是否报错最后都恢复所有图层的原始可见状态 for layer, visibility in zip(doc.layers, layer_visibilities): layer.visible visibility注意这里的try...finally结构万一某个图层导出失败脚本也会先把可见性恢复原样不会把用户的 PSD 搞乱。这是自动化脚本里最值得养成的习惯——操作前备份状态结束前恢复现场。避坑清单前辈们踩过的五个坑把社区里常见的翻车现场整理成一张清单帮你少走弯路在 macOS 上运行前面说过COM 只属于 Windows。这是最常见的装不上原因装之前先确认系统。没启动 Photoshop 就跑脚本Session()连接的是正在运行的 PS 进程PS 没开或者卡在启动界面脚本会直接报连接错误。顺序永远是人先开 PS再跑 Python。路径问题saveAs里写相对路径时工作目录和你以为的可能不一样。稳妥做法是用os.path.join(os.path.dirname(__file__), ...)拼绝对路径官方示例基本都是这么写的。保存选项没传进去ps.JPEGSaveOptions(quality12)只是创建了一个选项对象你必须把它作为参数传给doc.saveAs(path, options, asCopyTrue)才生效。很多人漏了这一步结果导出的还是默认质量。PS 版本差异导致属性缺失不同版本 PS 的 COM 接口略有差异。如果某属性在你机器上报错可以在Session(ps_version2022)里显式指定版本号绕过自动探测。另外提醒一句官方示例都放在examples/目录从hello_world.py到export_artboards.py有 60 多个遇到不知道怎么写的方法先去翻对应场景的示例通常比查文档更快。下一步让第一段自动化脚本跑起来技术文章写得再多也不如你亲手跑通一次。建议按这个顺序动手先开 Photoshop → 把第一个Hello, World脚本保存为.py文件 → 运行 → 看到 JPG 生成的那一瞬间你就理解了这一切的意义。然后做一件小事回想一下你上周在 PS 里重复做过的某件事不管是改文字、调尺寸还是导出素材把它写成脚本。你会发现第一次写脚本可能比手工操作还慢但第二次、第三次开始省下来的时间会成倍地回报你。自动化不是让你丢掉设计能力而是把机械劳动交给代码把创造时间留给自己。【免费下载链接】photoshop-python-apiPython API for Photoshop.项目地址: https://gitcode.com/gh_mirrors/ph/photoshop-python-api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表