# -*- coding: utf-8 -*- # Only required for example usage, see below. from __future__ import with_statement MAGIC_NUMBERS = ( ('gif', '\x47\x49\x46\x38\x37\x61'), # GIF87a ('gif', '\x47\x49\x46\x38\x39\x61'), # GIF89a ('jpeg', '\xFF\xD8\xFF'), ('png', '\x89\x50\x4e\x47\x0d\x0a\x1a\x0a'), ) MAX_BYTES = max(len(bytes) for name, bytes in MAGIC_NUMBERS) def guess_image_type(data): """Try to determine the image type using `magic numbers`_. If the type cannot be determined, ``None`` is returned. .. _magic numbers: http://en.wikipedia.org/wiki/Magic_number_%28programming%29 """ if not isinstance(data, basestring): data = data.read(MAX_BYTES) for type_, magic_number in MAGIC_NUMBERS: if data.startswith(magic_number): return type_ # example usage: with open('someimage.jpg', 'rb') as f: print guess_image_type(f)