mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
* Adds a Python script to optimize the map renders. * Check colour depth before quantizing.
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
#/usr/bin/env python
|
|
from __future__ import print_function
|
|
from distutils.spawn import find_executable
|
|
from os import listdir
|
|
from os.path import join, isdir, isfile
|
|
|
|
try:
|
|
import PIL.Image
|
|
except:
|
|
print("Unable to import Pillow. Please ensure Pillow is installed by running 'pip install pillow' in a command line.")
|
|
exit()
|
|
|
|
try:
|
|
import subprocess32 as subprocess # Use subprocess32 if the user has it installed instead.
|
|
except:
|
|
import subprocess
|
|
|
|
optipng = None
|
|
renderOutput = "renderoutput"
|
|
mapNames = ["BoxStation", "Defficiency", "MetaClub"]
|
|
|
|
def main():
|
|
global optipng
|
|
optipng = find_executable("optipng")
|
|
if not optipng: # Unable to find optipng executable.
|
|
print("Unable to find optipng executable. Please ensure it is in your PATH.")
|
|
exit()
|
|
|
|
for mapname in [join(renderOutput, x) for x in mapNames]:
|
|
if not isdir(mapname):
|
|
continue
|
|
|
|
for zlevel in listdir(mapname):
|
|
fullzpath = join(mapname, zlevel)
|
|
if not isdir(fullzpath):
|
|
continue
|
|
|
|
for filename in listdir(fullzpath):
|
|
optimize(join(fullzpath, filename))
|
|
|
|
|
|
def optimize(filename):
|
|
print(filename)
|
|
image = PIL.Image.open(filename)
|
|
if image.getcolors(128) == None: # None will happen if the amount is greater than 128.
|
|
print("Reducing colour depth to 128 with Pillow.")
|
|
image = image.quantize(128)
|
|
image.save(filename)
|
|
else:
|
|
print("Colour depth already at or lower than 128 colours.")
|
|
|
|
print("Optimizing with optipng.")
|
|
subprocess.call([optipng, filename])
|
|
|
|
if __name__ == "__main__":
|
|
main()
|