Scripting for Efficiency for Graphic Assets
After I finished up my first asset for the Gitcoin Asset Generator, it was time to export the various files that the web app needs to operate. This web app is built using Python and Django. Every hair .svg asset needs to be named with the following pattern
<hairname>-<hexadecimal color>.svg and a text file needed to be made for the Django template. ex) DamosHair-#ED20207.svg. There are 9 hair colors. That means opening changing the color 9 times and renaming the file 9 times PER ASSET, plus a Django .txt version.
You already know, I wasn’t about to design more assets and have to manually rename and recolor a bunch of files. Uhhhno. I got to work and with the guidance of a friend experienced in Python we knocked out this script before lunch. Now, with one command, I could rename, recolor, and template n+ svg files rather than spend minutes per each file.
Here’s a video of it in action
The script itself
import os import fileinput #authored by Damien Gilliams and Guled Abdilahi on 10/15/2018 print ("\n\n~~~Start of Program~~~\n") originalColor = "ed2027" //red hair :) newColors = ["000000", "4E3521", "8C3B28", "B28E28", "F4EA6E", "F0E6FF", "4D22D2", "8E2ABE", "3596EC", "0ECF7C", "ED2027"] # for the files in the dir for root, dirs, files in os.walk("."): for filename in files: # if file ext ends in .svg if (os.path.splitext(filename) == ".svg"): svgFile = open(filename, 'r') svgData = svgFile.read() svgFile.close() # make sure color exists in file if svgData.find(originalColor) == -1: print ("ERROR: Change fill color of " + filename + " to #ED2027 for script to work") continue newDirectory = os.path.splitext(filename) + "_assets" os.makedirs(newDirectory, exist_ok=True) for newColor in newColors: newSvgFileData = svgData.replace(originalColor, newColor) newFileName = os.path.splitext(filename) + "-" + newColor newFile = open(newDirectory + "/" + newFileName + ".svg", 'w') newFile.write(newSvgFileData) newFile.close print (newFileName + " was generated") # output replaced results to new file print ("\n\n~~~Done!~~~\n")