Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pillow-10.4.0-py3.8-linux-x86_64.egg/PIL/DcxImagePlugin.py: 42%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

38 statements  

1# 

2# The Python Imaging Library. 

3# $Id$ 

4# 

5# DCX file handling 

6# 

7# DCX is a container file format defined by Intel, commonly used 

8# for fax applications. Each DCX file consists of a directory 

9# (a list of file offsets) followed by a set of (usually 1-bit) 

10# PCX files. 

11# 

12# History: 

13# 1995-09-09 fl Created 

14# 1996-03-20 fl Properly derived from PcxImageFile. 

15# 1998-07-15 fl Renamed offset attribute to avoid name clash 

16# 2002-07-30 fl Fixed file handling 

17# 

18# Copyright (c) 1997-98 by Secret Labs AB. 

19# Copyright (c) 1995-96 by Fredrik Lundh. 

20# 

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

22# 

23from __future__ import annotations 

24 

25from . import Image 

26from ._binary import i32le as i32 

27from .PcxImagePlugin import PcxImageFile 

28 

29MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? 

30 

31 

32def _accept(prefix: bytes) -> bool: 

33 return len(prefix) >= 4 and i32(prefix) == MAGIC 

34 

35 

36## 

37# Image plugin for the Intel DCX format. 

38 

39 

40class DcxImageFile(PcxImageFile): 

41 format = "DCX" 

42 format_description = "Intel DCX" 

43 _close_exclusive_fp_after_loading = False 

44 

45 def _open(self) -> None: 

46 # Header 

47 s = self.fp.read(4) 

48 if not _accept(s): 

49 msg = "not a DCX file" 

50 raise SyntaxError(msg) 

51 

52 # Component directory 

53 self._offset = [] 

54 for i in range(1024): 

55 offset = i32(self.fp.read(4)) 

56 if not offset: 

57 break 

58 self._offset.append(offset) 

59 

60 self._fp = self.fp 

61 self.frame = -1 

62 self.n_frames = len(self._offset) 

63 self.is_animated = self.n_frames > 1 

64 self.seek(0) 

65 

66 def seek(self, frame: int) -> None: 

67 if not self._seek_check(frame): 

68 return 

69 self.frame = frame 

70 self.fp = self._fp 

71 self.fp.seek(self._offset[frame]) 

72 PcxImageFile._open(self) 

73 

74 def tell(self) -> int: 

75 return self.frame 

76 

77 

78Image.register_open(DcxImageFile.format, DcxImageFile, _accept) 

79 

80Image.register_extension(DcxImageFile.format, ".dcx")