def what(file, h=None): f = None try: if h is None: if isinstance(file, basestring): f = open(file, 'rb') h = f.read(32) else: location = file.tell() h = file.read(32) file.seek(location) for tf in tests: res = tf(h, f) if res: return res finally: if f: f.close() return None
#---------------------------------# # Subroutines per image file type # #---------------------------------#
tests = []
def test_jpeg(h, f): """JPEG data in JFIF format""" if h[6:10] == 'JFIF': return 'jpeg'
tests.append(test_jpeg)
def test_exif(h, f): """JPEG data in Exif format""" if h[6:10] == 'Exif': return 'jpeg'
tests.append(test_exif)
def test_png(h, f): if h[:8] == "\211PNG\r\n\032\n": return 'png'
tests.append(test_png)
def test_gif(h, f): """GIF ('87 and '89 variants)""" if h[:6] in ('GIF87a', 'GIF89a'): return 'gif'
tests.append(test_gif)
def test_tiff(h, f): """TIFF (can be in Motorola or Intel byte order)""" if h[:2] in ('MM', 'II'): return 'tiff'