Python + Photoshop 自動化實作 (1)

Python_Photoshop_automation_case_study_feature_picture_

前言:

先前的文章已經有給大家一些二次開發的基本知識,接下來我們就開始實作,所有的學習都是為了實作,所以我們就直接開始吧。

實操開始:

接下來會帶大家直接用各種功能介紹、並提供範例程式。

一開頭我們要做的事情是引入python的COM,當然你也可以用 import win32com.client 用win32的COM。如果執行程式呼不到,可以先在終端機輸入pip install pythoncom 或是 conda install pythoncom 安裝一下

#coding=utf-8
import comtypes.client
import pythoncom

接下來就是重頭戲了,先前文章也有介紹過,這邊是使用pythoncom直接把photoshop呼叫起來,只要執行這段代碼,PS就會開起來了。

 psApp = comtypes.client.CreateObject('Photoshop.Application')

開了photoshop以後,我們要來做一件事情,就是開檔案。下面的路徑跟檔案名稱請自己更換。

PS: 小提示一下,括號內字串的雙引號前有個小寫 r 記得留著它喔。因為它是幫你把反斜線無視的符號,就是說前面有打r”字串” ,這樣程式會把整個字串都當成是字串無論任何保留、還原字符都視為字串。

refDoc = psApp.Application.Open(r"C:\pathname_here\Auto_Feature_PIC_template.psd")

接著我們可以把當前作動(Active)著的檔案啟用

doc = psApp.Application.ActiveDocument

接下來我們試著做一個比較實用的範例 – 修改文字圖層內的文字內容。

如下程式碼,我們會先找到一個資料夾叫做 Adaptive_Title 然後把文字塞給它。

layer_facts = refDoc.ArtLayers["Adaptive_Title"]
text_of_layer = layer_facts.TextItem
TitleTextFromForm = r"產業追蹤/智駕測試 加速商業化進程"
text_of_layer.contents = TitleTextFromForm

說到這邊可以直接整合一下變成整段的程式碼,這邊主要的功能為,

開啟Photoshop

開啟檔案 (記得改成自己的路徑跟檔案名稱)

將特定文字圖層塞入字串

字串會依照不同的尺寸大小 改變 Photoshop內的文字大小

#coding=utf-8
import comtypes.client
import pythoncom
import time
#import win32com.client
import os

TitleTextFromForm =''

#psApp = win32com.client.Dispatch("Photoshop.Application")
psApp = comtypes.client.CreateObject('Photoshop.Application')

refDoc = psApp.Application.Open(r"C:\path_name\Auto_Feature_PIC_template.psd")
print(refDoc)
doc = psApp.Application.ActiveDocument

if doc == refDoc:
    print('Ture')

layer_facts = refDoc.ArtLayers["Adaptive_Title"]
text_of_layer = layer_facts.TextItem
TitleTextFromForm = r"產業追蹤/智駕測試 加速商業化進程"
text_of_layer.contents = TitleTextFromForm
#calculating the lenth of title wording
tempCharacterCount = len(TitleTextFromForm)
print('tempCharacterCount='+str(tempCharacterCount))
if tempCharacterCount<=18:
    text_of_layer.size = 56
    print("apply font size 56")
elif 26>=tempCharacterCount>=19:
    text_of_layer.size = 45
    print("apply font size 45")
elif 30>=tempCharacterCount>=27:
    text_of_layer.size = 42
    print("apply font size 45")
else:
    print("apply font size 40")
    text_of_layer.size = 40

結論:

根據以上的方法,相信大家已經很有感覺了,以往使用Action能做的事情還是有限制,若串接了python以後,可以做更多的判斷與應用。

若能跟其他的應用情境配搭,就能夠做出更有趣的應用了。

 未來有時間還是會持續撰寫相關的文章,與大家分享控制的過程或是專案實作心得。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *