Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/PIL/FitsImagePlugin.py: 18%

40 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1# 

2# The Python Imaging Library 

3# $Id$ 

4# 

5# FITS file handling 

6# 

7# Copyright (c) 1998-2003 by Fredrik Lundh 

8# 

9# See the README file for information on usage and redistribution. 

10# 

11 

12import math 

13 

14from . import Image, ImageFile 

15 

16 

17def _accept(prefix): 

18 return prefix[:6] == b"SIMPLE" 

19 

20 

21class FitsImageFile(ImageFile.ImageFile): 

22 

23 format = "FITS" 

24 format_description = "FITS" 

25 

26 def _open(self): 

27 headers = {} 

28 while True: 

29 header = self.fp.read(80) 

30 if not header: 

31 raise OSError("Truncated FITS file") 

32 keyword = header[:8].strip() 

33 if keyword == b"END": 

34 break 

35 value = header[8:].strip() 

36 if value.startswith(b"="): 

37 value = value[1:].strip() 

38 if not headers and (not _accept(keyword) or value != b"T"): 

39 raise SyntaxError("Not a FITS file") 

40 headers[keyword] = value 

41 

42 naxis = int(headers[b"NAXIS"]) 

43 if naxis == 0: 

44 raise ValueError("No image data") 

45 elif naxis == 1: 

46 self._size = 1, int(headers[b"NAXIS1"]) 

47 else: 

48 self._size = int(headers[b"NAXIS1"]), int(headers[b"NAXIS2"]) 

49 

50 number_of_bits = int(headers[b"BITPIX"]) 

51 if number_of_bits == 8: 

52 self.mode = "L" 

53 elif number_of_bits == 16: 

54 self.mode = "I" 

55 # rawmode = "I;16S" 

56 elif number_of_bits == 32: 

57 self.mode = "I" 

58 elif number_of_bits in (-32, -64): 

59 self.mode = "F" 

60 # rawmode = "F" if number_of_bits == -32 else "F;64F" 

61 

62 offset = math.ceil(self.fp.tell() / 2880) * 2880 

63 self.tile = [("raw", (0, 0) + self.size, offset, (self.mode, 0, -1))] 

64 

65 

66# -------------------------------------------------------------------- 

67# Registry 

68 

69Image.register_open(FitsImageFile.format, FitsImageFile, _accept) 

70 

71Image.register_extensions(FitsImageFile.format, [".fit", ".fits"])