summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1992-05-27 14:06:59 (GMT)
committerGuido van Rossum <guido@python.org>1992-05-27 14:06:59 (GMT)
commit1c34fc7afbb0e551ff9373968c18d5c4c099a50f (patch)
tree190d2d20851958e64469e90c08946c4d21b43f2a
parentb83ec8f58de07a3c5ba53342b19670a96dcd254d (diff)
downloadcpython-1c34fc7afbb0e551ff9373968c18d5c4c099a50f.zip
cpython-1c34fc7afbb0e551ff9373968c18d5c4c099a50f.tar.gz
cpython-1c34fc7afbb0e551ff9373968c18d5c4c099a50f.tar.bz2
Initial revision
-rw-r--r--Lib/imghdr.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/Lib/imghdr.py b/Lib/imghdr.py
new file mode 100644
index 0000000..b653cde
--- /dev/null
+++ b/Lib/imghdr.py
@@ -0,0 +1,98 @@
+# Recognizing image files based on their first few bytes.
+
+
+#-------------------------#
+# Recognize sound headers #
+#-------------------------#
+
+def what(filename):
+ f = open(filename, 'r')
+ h = f.read(32)
+ for tf in tests:
+ res = tf(h, f)
+ if res:
+ return res
+ return None
+
+
+#---------------------------------#
+# Subroutines per image file type #
+#---------------------------------#
+
+tests = []
+
+def test_rgb(h, f):
+ # SGI image library
+ if h[:2] == '\001\332':
+ return 'rgb'
+
+tests.append(test_rgb)
+
+def test_gif(h, f):
+ # GIF ('87 and '89 variants)
+ if h[:6] in ('GIF87a', 'GIF89a'):
+ return 'gif'
+
+tests.append(test_gif)
+
+def test_pnm(h, f):
+ # PBM, PGM, PPM (portable {bit,gray,pix}map; together portable anymap)
+ if h[0] == 'P' and h[1] in '123456' and h[2] in ' \t\n\r':
+ return 'pnm'
+
+tests.append(test_pnm)
+
+def test_tiff(h, f):
+ # TIFF (can be in Motorola or Intel byte order)
+ if h[:2] in ('MM', 'II'):
+ return 'tiff'
+
+tests.append(test_tiff)
+
+def test_rast(h, f):
+ # Sun raster file
+ if h[:4] == '\x59\xA6\x6A\x95':
+ return 'rast'
+
+tests.append(test_rast)
+
+
+#--------------------#
+# Small test program #
+#--------------------#
+
+def test():
+ import sys
+ recursive = 0
+ if sys.argv[1:] and sys.argv[1] == '-r':
+ del sys.argv[1:2]
+ recursive = 1
+ try:
+ if sys.argv[1:]:
+ testall(sys.argv[1:], recursive, 1)
+ else:
+ testall(['.'], recursive, 1)
+ except KeyboardInterrupt:
+ sys.stderr.write('\n[Interrupted]\n')
+ sys.exit(1)
+
+def testall(list, recursive, toplevel):
+ import sys
+ import os
+ for filename in list:
+ if os.path.isdir(filename):
+ print filename + '/:',
+ if recursive or toplevel:
+ print 'recursing down:'
+ import glob
+ names = glob.glob(os.path.join(filename, '*'))
+ testall(names, recursive, 0)
+ else:
+ print '*** directory (use -r) ***'
+ else:
+ print filename + ':',
+ sys.stdout.flush()
+ try:
+ print what(filename)
+ except IOError:
+ print '*** not found ***'