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()