Changed the img2py tool to use PNG instead of XPM for embedding image

data in Python source code, and the generated code now uses streams to
convert the image data to wxImage, wxBitmap, or wxIcon.

A few other changes to match recent additions to CVS.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14416 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-02-26 22:35:10 +00:00
parent c2ff68d3fd
commit afb810d936
19 changed files with 3675 additions and 1986 deletions

View File

@@ -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
@@ -36,33 +36,17 @@ Options:
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 optionally compress the result.
lines = []
for line in data:
if line[0] == "\"":
# the line is typically (but not always):
# [quote] <data> [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()
@@ -141,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)
@@ -158,32 +142,35 @@ 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 wxIconFromXPMData\n")
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"
" return wxIconFromXPMData(get%sData())\n\n"
" icon = wxEmptyIcon()\n"
" icon.CopyFromBitmap(get%sBitmap())\n"
" return icon\n\n"
% tuple([imgName] * 2))
@@ -201,7 +188,3 @@ def main(args):
if __name__ == "__main__":
main(sys.argv[1:])