前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >photoshop_python_api: 最好用的photoshop python api

photoshop_python_api: 最好用的photoshop python api

作者头像
用户9897904
发布2022-07-14 17:52:05
3.7K3
发布2022-07-14 17:52:05
举报
文章被收录于专栏:PipelinePipeline

在影视或者游戏的制作中我们多多少少会用到Photoshop, 但是Photoshop原生不支持Python, 这样会导致我们平常在做流程的时候打通其他环节到Photoshop的难度就加到了。如果买了Ftrack或者Shotgun的公司他们自带的工具链就支持通过python去操作Photoshop除此之外就通过Python的第三方库comtypes去操作Photoshop

今天在这里我要像大家分享的是我自己写的一个python库叫photoshop_python_api

然后也感谢我的小伙伴Limbo为我这个API设计的LOGO

安装

通过pip

代码语言:javascript
复制
pip install photoshop_python_api

或者通过git克隆

代码语言:javascript
复制
git clone https://github.com/loonghao/photoshop_python_api.git
python setup.py install

Hello World

代码语言:javascript
复制
import photoshop.api as ps
app = ps.Application()
doc = app.documents.add()
new_doc = doc.artLayers.add()
text_color = ps.SolidColor()
text_color.rgb.green = 255
new_text_layer = new_doc
new_text_layer.kind = ps.LayerKind.TextLayer
new_text_layer.textItem.contents = 'Hello, World!'
new_text_layer.textItem.position = [160, 167]
new_text_layer.textItem.size = 40
new_text_layer.textItem.color = text_color
options = ps.JPEGSaveOptions(quality=5)
# save to jpg
jpg = 'd:/hello_world.jpg'
doc.saveAs(jpg, options, asCopy=True)
app.doJavaScript(f'alert("save to jpg: {jpg}")')

由于此API是通过 COM (Component Object Model) 去连接的photoshop我可以在任何的DCC的python (必须python-3.5+)解释器上去使用此API去操作photoshop.

此API基本是对于Photoshop javescript API的一比一的翻译所以很多用法可以直接套用

比如获取当前文件名

Javascript

代码语言:javascript
复制
alert(app.activeDocument.fullName)

Python API

代码语言:javascript
复制
from photoshop import Session
with Session() as ps:
    ps.alert(ps.app.activeDocument.fullName)

这个API有什么优势?

  • 自动代码补全
  • 无其他第三方依赖, 不需要购买Shotgun或者Ftrack才能使用

这个API能为我们做些什么?

有这个API我们可以做很多事情了,

在影视行业我们可以写photoshop端的发布工具,可以在MP或者Concept画完后在photoshop中直接发布到下游,可以看看我利用这个API做了pyblish的集成

https://github.com/pyblish/pyblish-photoshop

还可以做自动加水印的功能

可以参考这个例子

代码语言:javascript
复制
"""Add slate information dynamically.

- Open template.
- Update info.
- Save as jpg.
- Close current document.

"""

import os
from datetime import datetime
from tempfile import mkdtemp

from photoshop import Session

import examples._psd_files as psd  # Import from examples.

PSD_FILE = psd.get_psd_files()
slate_template = PSD_FILE["slate_template.psd"]
with Session(slate_template, action="open", auto_close=True) as ps:
    layer_set = ps.active_document.layerSets.getByName("template")

    data = {
        "project name": "test_project",
        "datetime": datetime.today().strftime("%Y-%m-%d"),
    }
    for layer in layer_set.layers:
        if layer.kind == ps.LayerKind.TextLayer:
            layer.textItem.contents = data[layer.textItem.contents.strip()]

    jpg_file = os.path.join(mkdtemp("photoshop-python-api"), "slate.jpg")
    ps.active_document.saveAs(jpg_file, ps.JPEGSaveOptions())
    print(f"Save jpg to {jpg_file}")
    os.startfile(jpg_file)

examples/add_slate.py

在游戏行业我们可以利用此API,改善UI们的工具流,可以写类似于把photoshop的当前文件转成cocos工程文件或者自动输出UI文件的工具

更多例子,大家可以去这里看看

https://photoshop-python-api.readthedocs.io

现在这个API还没完全写完,但是已经能满足我们现在工作中大部分使用情况了,如果你遇到了什么bug,或者在使用上遇到了问题欢迎大家到GitHub上面提issue

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pipeline 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • Hello World
  • 这个API有什么优势?
  • 这个API能为我们做些什么?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档