X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7905ec5558bb5fe7bcaab231503112a6bf815580..3216dbf5dccab8ed6dc0245b7e5c998738ef51d7:/wxPython/tools/img2py.py diff --git a/wxPython/tools/img2py.py b/wxPython/tools/img2py.py index 5a3ad806cc..21957dc8bc 100644 --- a/wxPython/tools/img2py.py +++ b/wxPython/tools/img2py.py @@ -1,6 +1,6 @@ #!/usr/bin/env python """ -img2py.py -- Convert an image to XPM format and embed it in a Python +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 @@ -28,39 +28,25 @@ Options: -u Don't use compression. Leaves the data uncompressed. + -i Also output a function to return the image as a wxIcon. + """ import sys, os, glob, getopt, tempfile, string import cPickle, cStringIO, zlib -import img2xpm +import img2img +from wxPython import wx def crunch_data(data, compressed): - # convert the lines to a Python list, pickle it and compress the result. - lines = [] - for line in data: - if line[0] == "\"": - # the line is typically (but not always): - # [quote] [quote][comma][newline] - - # chop one char from the front - line = line[1:] - - # now find the final quote and truncate there - quote = string.rfind(line, "\"") - - # and append the remaining data to our list - lines.append(line[:quote]) - - - # pickle, crunch and convert it to a form suitable for embedding in code - data = cPickle.dumps(lines) + # compress it? if compressed: data = zlib.compress(data, 9) - data = repr(data) + # convert to a printable format, so it can be in a Python source file + data = repr(data) # This next bit is borrowed from PIL. It is used to wrap the text intelligently. fp = cStringIO.StringIO() @@ -68,6 +54,7 @@ def crunch_data(data, compressed): c = i = 0 word = "" octdigits = "01234567" + hexdigits = "0123456789abcdef" while i < len(data): if data[i] != "\\": word = data[i] @@ -79,9 +66,16 @@ def crunch_data(data, compressed): break word = data[i:i+n] i = i + n + elif data[i+1] == 'x': + for n in range(2, 5): + if data[i+n] not in hexdigits: + break + word = data[i:i+n] + i = i + n else: word = data[i:i+2] i = i + 2 + l = len(word) if c + l >= 78-1: fp.write("\\\n") @@ -103,9 +97,10 @@ def main(args): compressed = 1 maskClr = None imgName = "" + icon = 0 try: - opts, fileArgs = getopt.getopt(args, "aun:m:") + opts, fileArgs = getopt.getopt(args, "auin:m:") except getopt.GetoptError: print __doc__ return @@ -119,6 +114,8 @@ def main(args): imgName = val elif opt == "-m": maskClr = val + elif opt == "-i": + icon = 1 if len(fileArgs) != 2: print __doc__ @@ -128,12 +125,12 @@ def main(args): # convert the image file to a temporary file tfname = tempfile.mktemp() - ok, msg = img2xpm.convert(image_file, maskClr, None, tfname) + ok, msg = img2img.convert(image_file, maskClr, None, tfname, wx.wxBITMAP_TYPE_PNG, ".png") if not ok: print msg return - data = open(tfname, "r").readlines() + data = open(tfname, "rb").read() data = crunch_data(data, compressed) os.unlink(tfname) @@ -145,27 +142,37 @@ def main(args): out.write("#" + "-" * 70 + "\n") if not append: out.write("# This file was generated by %s\n#\n" % sys.argv[0]) - out.write("from wxPython.wx import wxBitmapFromXPMData, wxImageFromBitmap\n") + out.write("from wxPython.wx import wxImageFromStream, wxBitmapFromImage\n") + if icon: + out.write("from wxPython.wx import wxEmptyIcon\n") if compressed: - out.write("import cPickle, zlib\n\n\n") + out.write("import cStringIO, zlib\n\n\n") else: - out.write("import cPickle\n\n\n") + out.write("import cStringIO\n\n\n") if compressed: out.write("def get%sData():\n" - " return cPickle.loads(zlib.decompress(\n%s))\n\n" + " return zlib.decompress(\n%s)\n\n" % (imgName, data)) else: out.write("def get%sData():\n" - " return cPickle.loads(\n%s)\n\n" + " return %s\n\n" % (imgName, data)) out.write("def get%sBitmap():\n" - " return wxBitmapFromXPMData(get%sData())\n\n" + " return wxBitmapFromImage(get%sImage())\n\n" "def get%sImage():\n" - " return wxImageFromBitmap(get%sBitmap())\n\n" + " stream = cStringIO.StringIO(get%sData())\n" + " return wxImageFromStream(stream)\n\n" % tuple([imgName] * 4)) + if icon: + out.write("def get%sIcon():\n" + " icon = wxEmptyIcon()\n" + " icon.CopyFromBitmap(get%sBitmap())\n" + " return icon\n\n" + % tuple([imgName] * 2)) + if imgName: n_msg = ' using "%s"' % imgName @@ -181,7 +188,3 @@ def main(args): if __name__ == "__main__": main(sys.argv[1:]) - - - -