Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Imaging/Scripts/image2py.py
diff options
context:
space:
mode:
Diffstat (limited to 'Imaging/Scripts/image2py.py')
-rw-r--r--Imaging/Scripts/image2py.py125
1 files changed, 125 insertions, 0 deletions
diff --git a/Imaging/Scripts/image2py.py b/Imaging/Scripts/image2py.py
new file mode 100644
index 0000000..f769a7f
--- /dev/null
+++ b/Imaging/Scripts/image2py.py
@@ -0,0 +1,125 @@
+#
+# The Python Imaging Library
+# $Id: image2py.py 2134 2004-10-06 08:55:20Z fredrik $
+#
+# convert an image to a Python module
+#
+# to use the module, import it and access the "IMAGE" variable
+#
+# import img1
+# im = img1.IMAGE
+#
+# the variable name can be changed with the -n option
+#
+# note that the application using this module must include JPEG
+# and/or ZIP decoders, unless the -u option is used.
+#
+# Copyright (c) Secret Labs AB 1997. All rights reserved.
+# Copyright (c) Fredrik Lundh 1997.
+#
+# See the README file for information on usage and redistribution.
+#
+
+import Image
+import getopt, string, StringIO, sys
+
+octdigits = "01234567"
+
+def usage():
+ print "image2py 0.1/97-01-03 -- convert image to python module"
+ print
+ print "Usage: image2py [options] imagefile pyfile"
+ print
+ print "Options:"
+ print " -n <name> set variable name (default is 'IMAGE')"
+ print " -l use lossy compression (JPEG) if suitable"
+ print " -u disable compression"
+ print
+ print "Provided you use distinct variable names, the output"
+ print "files can be concatenated into one large module file."
+ sys.exit(1)
+
+try:
+ opt, argv = getopt.getopt(sys.argv[1:], "n:lu")
+except getopt.error, v:
+ usage()
+
+name = "IMAGE"
+lossy = 0
+compress = 1
+
+for o, a in opt:
+ if o == "-n":
+ name = a
+ elif o == "-l":
+ lossy = 1
+ elif o == "-u":
+ compress = 0
+
+if len(argv) != 2:
+ usage()
+
+# --------------------------------------------------------------------
+# convert image to string
+
+im = Image.open(argv[0])
+
+if im.format == "JPEG" and compress:
+
+ # store as is
+ data = open(argv[0], "rb").read()
+
+else:
+
+ # load and store as PNG
+ fp = StringIO.StringIO()
+
+ if compress:
+ if lossy and im.mode in ["L", "RGB"]:
+ im.save(fp, "JPEG")
+ else:
+ im.convert("RGB").save(fp, "PNG")
+ else:
+ im.save(fp, "PPM") # FIXME: won't work with "P" images
+
+ data = fp.getvalue()
+
+# --------------------------------------------------------------------
+# convert string to python module (this is not very fast...)
+
+fp = open(argv[1], "w")
+
+data = repr(data)
+
+fp.write("# generated by image2py %s\n" % argv[0])
+fp.write("import Image, StringIO\n")
+
+word = "%s = Image.open(StringIO.StringIO('" % name
+
+fp.write(word)
+c = len(word)
+
+i = 1
+while i < len(data)-1:
+ if data[i] != "\\":
+ word = data[i]
+ i = i + 1
+ else:
+ if data[i+1] in octdigits:
+ for n in range(2, 5):
+ if data[i+n] not in octdigits:
+ 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'")
+ fp.write("\\\n")
+ c = 0
+ fp.write(word)
+ c = c + l
+
+fp.write("'))\n")