1#
2# The Python Imaging Library.
3# $Id$
4#
5# PCD file handling
6#
7# History:
8# 96-05-10 fl Created
9# 96-05-27 fl Added draft mode (128x192, 256x384)
10#
11# Copyright (c) Secret Labs AB 1997.
12# Copyright (c) Fredrik Lundh 1996.
13#
14# See the README file for information on usage and redistribution.
15#
16from __future__ import annotations
17
18from . import Image, ImageFile
19
20##
21# Image plugin for PhotoCD images. This plugin only reads the 768x512
22# image from the file; higher resolutions are encoded in a proprietary
23# encoding.
24
25
26class PcdImageFile(ImageFile.ImageFile):
27 format = "PCD"
28 format_description = "Kodak PhotoCD"
29
30 def _open(self) -> None:
31 # rough
32 assert self.fp is not None
33
34 self.fp.seek(2048)
35 s = self.fp.read(2048)
36
37 if not s.startswith(b"PCD_"):
38 msg = "not a PCD file"
39 raise SyntaxError(msg)
40
41 orientation = s[1538] & 3
42 self.tile_post_rotate = None
43 if orientation == 1:
44 self.tile_post_rotate = 90
45 elif orientation == 3:
46 self.tile_post_rotate = -90
47
48 self._mode = "RGB"
49 self._size = 768, 512 # FIXME: not correct for rotated images!
50 self.tile = [ImageFile._Tile("pcd", (0, 0) + self.size, 96 * 2048)]
51
52 def load_end(self) -> None:
53 if self.tile_post_rotate:
54 # Handle rotated PCDs
55 self.im = self.im.rotate(self.tile_post_rotate)
56 self._size = self.im.size
57
58
59#
60# registry
61
62Image.register_open(PcdImageFile.format, PcdImageFile)
63
64Image.register_extension(PcdImageFile.format, ".pcd")