前言:
根據之前的兩篇文章,若有跟著我一起實際操作的話,應該可以發現Python+Photoshop的威力,以及看著程式自動操作著我們原本設計師在做事情會有一種特別的趣味。若你還沒看過文章可以先看看
Photoshop + Python 釋放你的雙手來點自動化設計??
Python + Photoshop 自動化實作 (1)
若看過了上面兩篇文章也實際操練過後
OK, 那本文現在要接著介紹如何將照片複製貼上到某一個圖層的後面。
實際操練
首先我們先看一下我們要實作的圖層結構,我們故意在圖層中加入了一個空的圖層命名叫做 [BG_Flag]
程式開發思路:
這邊我們會一樣先開檔案,把另一個圖片檔案打開
然後開始複製貼上,要複製貼上之前,要先框選一個選區
製作選區之前要先給四個位置,然後在執行複製.copy()的指令
複製之後再切換到另一個文件檔案,然後再把當前作動的圖層打開
這時候我們要設定抓取上面提到的空圖層[BG_Flag] 並設它為當前作動的圖層
這時候我們只要從剪貼簿貼上就完成了。
程式範例源代碼:
from comtypes.client import GetActiveObject
app = GetActiveObject("Photoshop.Application")
# Setup PS constants
psInches = 2
psPixels = 1
psNewRGB = 2
psWhite = 1
psTextLayer = 2
psReplaceSelection = 1
strtRulerUnits = app.Preferences.RulerUnits
if strtRulerUnits is not psInches:
app.Preferences.RulerUnits = psInches
srcDoc = app.Documents.Add(7, 5, 72, None, psNewRGB, psWhite)
# Make sure the active layer is not a text layer, which cannot be copied to the clipboard
if srcDoc.ActiveLayer.Kind != psTextLayer:
# Range of resolution
x2 = (srcDoc.Width * srcDoc.Resolution) / 2
y2 = srcDoc.Height * srcDoc.Resolution
# srcDoc.Selection.Select([(0, 0), (x2, 0), (x2), (y2), (0, y2)], psReplaceSelection, 0, False)
sel_area = ((0, 0), (x2, 0), (x2, y2), (0, y2))
# sel_area argument not accepted if using win32com, using comtypes instead
srcDoc.Selection.Select(sel_area, psReplaceSelection, 0, False)
srcDoc.Selection.Copy()
# The new doc is created
# need to change ruler units to pixels because x2 and y2 are pixel units.
app.Preferences.RulerUnits = psPixels
pasteDoc = app.Documents.Add(x2, y2, srcDoc.Resolution, "Paste Target")
pasteDoc.Paste()
else:
print("You cannot copy from a text layer")
if strtRulerUnits != app.Preferences.RulerUnits:
app.Preferences.RulerUnits = strtRulerUnits
上面就是複製貼上的範例程式,歡迎大家玩看看囉
結論:
根據前面的練習我們已經能夠熟悉基本的photoshop控制,並且也能夠自動的控制文字大小,在加上本篇學到的將圖片貼入特定圖層以後。聰明如你,是不是想到這樣的組的已經可以做出自動化的標題圖片了呢?相信有這樣的基礎以後,想要做其他的自動化,也不是什麼難事了。重點是你省掉了大量爬文的時間,直接獲取最關鍵核心的程式控制的精髓。若有什麼想法再一起討論囉。