commit cdd6d5090c202253eabb893478d98de6fee57e66
parent 76a60bca84b24504a786f835b0d0b85a5f748cf4
Author: falkTX <falktx@gmail.com>
Date: Tue, 24 Dec 2013 09:29:15 +0000
Add python script used to convert pngs to raw data
Diffstat:
A | utils/png2rgba.py | | | 127 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 127 insertions(+), 0 deletions(-)
diff --git a/utils/png2rgba.py b/utils/png2rgba.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python
+
+import os, numpy, sys
+import Image
+
+# -----------------------------------------------------
+
+def png2rgba(namespace, filenames):
+
+ fdH = open("%s.hpp" % namespace, "w")
+ fdH.write("/* (Auto-generated binary data file). */\n")
+ fdH.write("\n")
+ fdH.write("#ifndef BINARY_%s_HPP\n" % namespace.upper())
+ fdH.write("#define BINARY_%s_HPP\n" % namespace.upper())
+ fdH.write("\n")
+ fdH.write("namespace %s\n" % namespace)
+ fdH.write("{\n")
+
+ fdC = open("%s.cpp" % namespace, "w")
+ fdC.write("/* (Auto-generated binary data file). */\n")
+ fdC.write("\n")
+ fdC.write("#include \"%s.hpp\"\n" % namespace)
+ fdC.write("\n")
+
+ tempIndex = 1
+
+ for filename in filenames:
+ shortFilename = filename.rsplit(os.sep, 1)[-1].split(".", 1)[0]
+ shortFilename = shortFilename.replace("-", "_")
+
+ png = Image.open(filename)
+ pngNumpy = numpy.array(png)
+ pngData = pngNumpy.tolist()
+ pngData.reverse()
+
+ height = len(pngData)
+ for dataBlock in pngData:
+ width = len(dataBlock)
+ channels = len(dataBlock[0])
+ break
+ else:
+ print("Invalid image found, cannot continue!")
+ quit()
+
+ if channels not in (3, 4):
+ print("Invalid image channel count, cannot continue!")
+ quit()
+
+ print("Generating data for \"%s\" using '%s' type" % (filename, "GL_BGR" if channels == 3 else "GL_BGRA"))
+ #print(" Width: %i" % width)
+ #print(" Height: %i" % height)
+ #print(" DataSize: %i" % (width * height * channels))
+
+ fdH.write(" extern const char* %sData;\n" % shortFilename)
+ fdH.write(" const unsigned int %sDataSize = %i;\n" % (shortFilename, width * height * channels))
+ fdH.write(" const unsigned int %sWidth = %i;\n" % (shortFilename, width))
+ fdH.write(" const unsigned int %sHeight = %i;\n" % (shortFilename, height))
+
+ if tempIndex != len(filenames):
+ fdH.write("\n")
+
+ fdC.write("static const unsigned char temp%i[] = {\n" % tempIndex)
+
+ curColumn = 1
+ fdC.write(" ")
+
+ for dataBlock in pngData:
+ if curColumn == 0:
+ fdC.write(" ")
+
+ for data in dataBlock:
+ if channels == 3:
+ r, g, b = data
+ fdC.write(" %3u, %3u, %3u," % (b, g, r))
+ else:
+ r, g, b, a = data
+
+ fdC.write(" %3u, %3u, %3u, %3u," % (b, g, r, a))
+
+ if curColumn > 20:
+ fdC.write("\n ")
+ curColumn = 1
+ else:
+ curColumn += 1
+
+ fdC.write("};\n")
+ fdC.write("const char* %s::%sData = (const char*)temp%i;\n" % (namespace, shortFilename, tempIndex))
+
+ if tempIndex != len(filenames):
+ fdC.write("\n")
+
+ tempIndex += 1
+
+ fdH.write("}\n")
+ fdH.write("\n")
+ fdH.write("#endif // BINARY_%s_HPP\n" % namespace.upper())
+ fdH.write("\n")
+ fdH.close()
+
+ fdC.write("\n")
+ fdC.close()
+
+# -----------------------------------------------------
+
+if __name__ == '__main__':
+ if len(sys.argv) != 3:
+ print("Usage: %s <namespace> <artwork-folder>" % sys.argv[0])
+ quit()
+
+ namespace = sys.argv[1]
+ artFolder = sys.argv[2]
+
+ if not os.path.exists(artFolder):
+ print("Folder '%s' does not exist" % artFolder)
+ quit()
+
+ # find png files
+ pngFiles = []
+
+ for root, dirs, files in os.walk(artFolder):
+ for name in [name for name in files if name.lower().endswith(".png")]:
+ pngFiles.append(os.path.join(root, name))
+
+ pngFiles.sort()
+
+ # create code now
+ png2rgba(namespace, pngFiles)