Buckets:
| """Recognize image file formats based on their first few bytes.""" | |
| from os import PathLike | |
| __all__ = ["what"] | |
| #-------------------------# | |
| # Recognize image headers # | |
| #-------------------------# | |
| def what(file, h=None): | |
| f = None | |
| try: | |
| if h is None: | |
| if isinstance(file, (str, PathLike)): | |
| 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 or Exif format""" | |
| if h[6:10] in (b'JFIF', b'Exif'): | |
| return 'jpeg' | |
| tests.append(test_jpeg) | |
| def test_png(h, f): | |
| if h.startswith(b'\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 (b'GIF87a', b'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 (b'MM', b'II'): | |
| return 'tiff' | |
| tests.append(test_tiff) | |
| def test_rgb(h, f): | |
| """SGI image library""" | |
| if h.startswith(b'\001\332'): | |
| return 'rgb' | |
| tests.append(test_rgb) | |
| def test_pbm(h, f): | |
| """PBM (portable bitmap)""" | |
| if len(h) >= 3 and \ | |
| h[0] == ord(b'P') and h[1] in b'14' and h[2] in b' \t\n\r': | |
| return 'pbm' | |
| tests.append(test_pbm) | |
| def test_pgm(h, f): | |
| """PGM (portable graymap)""" | |
| if len(h) >= 3 and \ | |
| h[0] == ord(b'P') and h[1] in b'25' and h[2] in b' \t\n\r': | |
| return 'pgm' | |
| tests.append(test_pgm) | |
| def test_ppm(h, f): | |
| """PPM (portable pixmap)""" | |
| if len(h) >= 3 and \ | |
| h[0] == ord(b'P') and h[1] in b'36' and h[2] in b' \t\n\r': | |
| return 'ppm' | |
| tests.append(test_ppm) | |
| def test_rast(h, f): | |
| """Sun raster file""" | |
| if h.startswith(b'\x59\xA6\x6A\x95'): | |
| return 'rast' | |
| tests.append(test_rast) | |
| def test_xbm(h, f): | |
| """X bitmap (X10 or X11)""" | |
| if h.startswith(b'#define '): | |
| return 'xbm' | |
| tests.append(test_xbm) | |
| def test_bmp(h, f): | |
| if h.startswith(b'BM'): | |
| return 'bmp' | |
| tests.append(test_bmp) | |
| def test_webp(h, f): | |
| if h.startswith(b'RIFF') and h[8:12] == b'WEBP': | |
| return 'webp' | |
| tests.append(test_webp) | |
| def test_exr(h, f): | |
| if h.startswith(b'\x76\x2f\x31\x01'): | |
| return 'exr' | |
| tests.append(test_exr) | |
| #--------------------# | |
| # 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 + '/:', end=' ') | |
| if recursive or toplevel: | |
| print('recursing down:') | |
| import glob | |
| names = glob.glob(os.path.join(glob.escape(filename), '*')) | |
| testall(names, recursive, 0) | |
| else: | |
| print('*** directory (use -r) ***') | |
| else: | |
| print(filename + ':', end=' ') | |
| sys.stdout.flush() | |
| try: | |
| print(what(filename)) | |
| except OSError: | |
| print('*** not found ***') | |
| if __name__ == '__main__': | |
| test() | |
Xet Storage Details
- Size:
- 3.81 kB
- Xet hash:
- 3468903bb4b3c62a50b613bddb7f8f1e23963af797dbde50a4871412c5df88b6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.