XenoAura
10/1/2017 - 3:22 PM

photoshop.py

import win32com.client

class Photoshop(object):

	def __init__(self, psd_file):
		self.psApp = win32com.client.Dispatch("Photoshop.Application")
		self.psApp.Open(psd_file)
		self.saved_state = self.psApp.ActiveDocument.ActiveHistoryState
		self.layers = Photoshop.get_layers(self.psApp.ActiveDocument)
		self.save_options = Photoshop.create_jpeg_save_options()

	@staticmethod
	def create_jpeg_save_options():
		"create save options "
		opt = win32com.client.Dispatch("Photoshop.JPEGSaveOptions")  
		opt.EmbedColorProfile = True
		opt.FormatOptions = 1
		opt.Matte = 1
		opt.Quality = 1
		return opt

	@staticmethod
	def get_layers(doc, layers={}):
		"get layers as a dict with layer_name => layer_refernce"
		for layer in doc.ArtLayers:
			if layer.Kind == 2:
				layers[layer.Name] = layer
		for layerSet in doc.LayerSets:
			layers = Photoshop.get_layers(layerSet, layers)
		return layers

	def set(self, layer_name, text):
		"set a variable name"
		layer = self.layers[layer_name]
		layer.TextItem.Contents = text

	def save(self, file_name):
		"save the file"
		doc = self.psApp.ActiveDocument
		doc.SaveAs(file_name, self.save_options, True, 2)

	def reset(self):
		"Reset the file to its original state"
		doc = self.psApp.ActiveDocument
		doc.ActiveHistoryState = self.saved_state

	def close(self):
		"Close Photoshop"
		self.psApp.ActiveDocument.Close(2)
		self.psApp.Quit()

def main():

	# open photoshop
	ps = Photoshop(r"C:\Users\GamingDesktop\Documents\Template.psd")

	# set a variable with layer_name, text
	ps.set("UserName", "Ilia Choly")
	ps.set("UserAge", "22")

	# save the file as jpeg
	ps.save(r"C:\Users\GamingDesktop\Documents\Out.jpeg")

	# undo all changes
	ps.reset()

	# close document
	ps.close()

if __name__ == "__main__":
	main()