summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/wx-3.0-msw/wx/tools/img2py.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/wx-3.0-msw/wx/tools/img2py.py')
-rw-r--r--lib/python2.7/site-packages/wx-3.0-msw/wx/tools/img2py.py317
1 files changed, 317 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/wx-3.0-msw/wx/tools/img2py.py b/lib/python2.7/site-packages/wx-3.0-msw/wx/tools/img2py.py
new file mode 100644
index 0000000..8299f76
--- /dev/null
+++ b/lib/python2.7/site-packages/wx-3.0-msw/wx/tools/img2py.py
@@ -0,0 +1,317 @@
+#----------------------------------------------------------------------
+# Name: wx.tools.img2py
+# Purpose: Convert an image to Python code.
+#
+# Author: Robin Dunn
+#
+# RCS-ID: $Id$
+# Copyright: (c) 2002 by Total Control Software
+# Licence: wxWindows license
+#----------------------------------------------------------------------
+#
+# Changes:
+# - Cliff Wells <LogiplexSoftware@earthlink.net>
+# 20021206: Added catalog (-c) option.
+#
+# 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+# V2.5 compatibility update
+#
+# 2/25/2007 - Gianluca Costa (archimede86@katamail.com)
+# -Refactorization of the script-creation code in a specific "img2py()" function
+# -Added regex parsing instead of module importing
+# -Added some "try/finally" statements
+# -Added default values as named constants
+# -Made some parts of code a bit easier to read
+# -Updated the module docstring
+# -Corrected a bug with EmptyIcon
+#
+# 11/26/2007 - Anthony Tuininga (anthony.tuininga@gmail.com)
+# -Use base64 encoding instead of simple repr
+# -Remove compression which doesn't buy anything in most cases and
+# costs more in many cases
+# -Use wx.lib.embeddedimage.PyEmbeddedImage class which has methods
+# rather than using standalone methods
+#
+
+
+
+"""
+img2py.py -- Convert an image to PNG format and embed it in a Python
+ module with appropriate code so it can be loaded into
+ a program at runtime. The benefit is that since it is
+ Python source code it can be delivered as a .pyc or
+ 'compiled' into the program using freeze, py2exe, etc.
+
+Usage:
+
+ img2py.py [options] image_file python_file
+
+Options:
+
+ -m <#rrggbb> If the original image has a mask or transparency defined
+ it will be used by default. You can use this option to
+ override the default or provide a new mask by specifying
+ a colour in the image to mark as transparent.
+
+ -n <name> Normally generic names (getBitmap, etc.) are used for the
+ image access functions. If you use this option you can
+ specify a name that should be used to customize the access
+ fucntions, (getNameBitmap, etc.)
+
+ -c Maintain a catalog of names that can be used to reference
+ images. Catalog can be accessed via catalog and
+ index attributes of the module.
+ If the -n <name> option is specified then <name>
+ is used for the catalog key and index value, otherwise
+ the filename without any path or extension is used
+ as the key.
+
+ -a This flag specifies that the python_file should be appended
+ to instead of overwritten. This in combination with -n will
+ allow you to put multiple images in one Python source file.
+
+ -i Also output a function to return the image as a wxIcon.
+
+ -f Generate code compatible with the old function interface.
+ (This option is ON by default in 2.8, use -F to turn off.)
+
+You can also import this module from your Python scripts, and use its img2py()
+function. See its docstring for more info.
+"""
+
+import base64
+import getopt
+import glob
+import os
+import re
+import sys
+import tempfile
+
+import wx
+import img2img
+
+try:
+ b64encode = base64.b64encode
+except AttributeError:
+ b64encode = base64.encodestring
+
+app = None
+DEFAULT_APPEND = False
+DEFAULT_COMPRESSED = True
+DEFAULT_MASKCLR = None
+DEFAULT_IMGNAME = ""
+DEFAULT_ICON = False
+DEFAULT_CATALOG = False
+DEFAULT_COMPATIBLE = False
+
+# THIS IS USED TO IDENTIFY, IN THE GENERATED SCRIPT, LINES IN THE FORM
+# "index.append('Image name')"
+indexPattern = re.compile(r"\s*index.append\('(.+)'\)\s*")
+
+
+def convert(fileName, maskClr, outputDir, outputName, outType, outExt):
+ # if the file is already the right type then just use it directly
+ if maskClr == DEFAULT_MASKCLR and fileName.upper().endswith(outExt.upper()):
+ if outputName:
+ newname = outputName
+ else:
+ newname = os.path.join(outputDir,
+ os.path.basename(os.path.splitext(fileName)[0]) + outExt)
+ file(newname, "wb").write(file(fileName, "rb").read())
+ return 1, "ok"
+
+ else:
+ return img2img.convert(fileName, maskClr, outputDir, outputName, outType, outExt)
+
+
+def img2py(image_file, python_file,
+ append=DEFAULT_APPEND,
+ compressed=DEFAULT_COMPRESSED,
+ maskClr=DEFAULT_MASKCLR,
+ imgName=DEFAULT_IMGNAME,
+ icon=DEFAULT_ICON,
+ catalog=DEFAULT_CATALOG,
+ functionCompatible=DEFAULT_COMPATIBLE,
+ functionCompatibile=-1, # typo version for backward compatibility
+ ):
+ """
+ Converts an image file to a data structure written in a Python file
+ --image_file: string; the path of the source image file
+ --python_file: string; the path of the destination python file
+ --other arguments: they are equivalent to the command-line arguments
+ """
+
+ # was the typo version used?
+ if functionCompatibile != -1:
+ functionCompatible = functionCompatibile
+
+ global app
+ if not wx.GetApp():
+ app = wx.App()
+
+ # convert the image file to a temporary file
+ tfname = tempfile.mktemp()
+ try:
+ ok, msg = convert(image_file, maskClr, None, tfname, wx.BITMAP_TYPE_PNG, ".png")
+ if not ok:
+ print msg
+ return
+
+ lines = []
+ data = b64encode(open(tfname, "rb").read())
+ while data:
+ part = data[:72]
+ data = data[72:]
+ output = ' "%s"' % part
+ if not data:
+ output += ")"
+ lines.append(output)
+ data = "\n".join(lines)
+ finally:
+ if os.path.exists(tfname):
+ os.remove(tfname)
+
+ old_index = []
+ if catalog and append and python_file != '-':
+ # check to see if catalog exists already (file may have been created
+ # with an earlier version of img2py or without -c option)
+ pyPath, pyFile = os.path.split(python_file)
+
+ append_catalog = True
+
+ sourcePy = open(python_file, "r")
+ try:
+ for line in sourcePy:
+
+ if line == "catalog = {}\n":
+ append_catalog = False
+ else:
+ lineMatcher = indexPattern.match(line)
+ if lineMatcher:
+ old_index.append(lineMatcher.groups()[0])
+ finally:
+ sourcePy.close()
+
+ if append_catalog:
+ out = open(python_file, "a")
+ try:
+ out.write("\n# ***************** Catalog starts here *******************")
+ out.write("\n\ncatalog = {}\n")
+ out.write("index = []\n\n")
+ finally:
+ out.close()
+
+ if python_file == '-':
+ out = sys.stdout
+ elif append:
+ out = open(python_file, "a")
+ else:
+ out = open(python_file, "w")
+
+ try:
+ imgPath, imgFile = os.path.split(image_file)
+ if not imgName:
+ imgName = os.path.splitext(imgFile)[0]
+ print "\nWarning: -n not specified. Using filename (%s) for name of image and/or catalog entry." % imgName
+
+ out.write("#" + "-" * 70 + "\n")
+ if not append:
+ out.write("# This file was generated by %s\n#\n" % sys.argv[0])
+ out.write("from wx.lib.embeddedimage import PyEmbeddedImage\n\n")
+ if catalog:
+ out.write("catalog = {}\n")
+ out.write("index = []\n\n")
+
+ letters = []
+ for letter in imgName:
+ if not letter.isalnum():
+ letter = "_"
+ letters.append(letter)
+ if not letters[0].isalpha() and letters[0] != '_':
+ letters.insert(0, "_")
+ varName = "".join(letters)
+
+ out.write("%s = PyEmbeddedImage(\n%s\n" % (varName, data))
+
+ if catalog:
+ if imgName in old_index:
+ print "Warning: %s already in catalog." % imgName
+ print " Only the last entry will be accessible.\n"
+ old_index.append(imgName)
+ out.write("index.append('%s')\n" % imgName)
+ out.write("catalog['%s'] = %s\n" % (imgName, varName))
+
+ if functionCompatible:
+ out.write("get%sData = %s.GetData\n" % (varName, varName))
+ out.write("get%sImage = %s.GetImage\n" % (varName, varName))
+ out.write("get%sBitmap = %s.GetBitmap\n" % (varName, varName))
+ if icon:
+ out.write("get%sIcon = %s.GetIcon\n" % (varName, varName))
+
+ out.write("\n")
+
+ if imgName:
+ n_msg = ' using "%s"' % imgName
+ else:
+ n_msg = ""
+
+ if maskClr:
+ m_msg = " with mask %s" % maskClr
+ else:
+ m_msg = ""
+
+ print "Embedded %s%s into %s%s" % (image_file, n_msg, python_file, m_msg)
+ finally:
+ if python_file != '-':
+ out.close()
+
+
+
+def main(args=None):
+ if not args:
+ args = sys.argv[1:]
+
+ if not args or ("-h" in args):
+ print __doc__
+ return
+
+ append = DEFAULT_APPEND
+ compressed = DEFAULT_COMPRESSED
+ maskClr = DEFAULT_MASKCLR
+ imgName = DEFAULT_IMGNAME
+ icon = DEFAULT_ICON
+ catalog = DEFAULT_CATALOG
+ compatible = DEFAULT_COMPATIBLE
+
+ try:
+ opts, fileArgs = getopt.getopt(args, "auicfFn:m:")
+ except getopt.GetoptError:
+ print __doc__
+ return
+
+ for opt, val in opts:
+ if opt == "-a":
+ append = True
+ elif opt == "-n":
+ imgName = val
+ elif opt == "-m":
+ maskClr = val
+ elif opt == "-i":
+ icon = True
+ elif opt == "-c":
+ catalog = True
+ elif opt == "-f":
+ compatible = True
+ elif opt == "-F":
+ compatible = False
+
+ if len(fileArgs) != 2:
+ print __doc__
+ return
+
+ image_file, python_file = fileArgs
+ img2py(image_file, python_file,
+ append, compressed, maskClr, imgName, icon, catalog, compatible)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])