Source code for pytoshop.core

# -*- coding: utf-8 -*-


"""
The core objects, including the `PsdFile` and its `Header`.
"""


from __future__ import unicode_literals, absolute_import


from typing import BinaryIO, Dict, Optional, Tuple  # NOQA


from .color_mode import ColorModeData
from . import docs
from . import enums
from .image_data import ImageData
from .image_resources import ImageResources
from .layers import LayerAndMaskInfo
from . import util





[docs]class PsdFile(Header): """ Represents an entire PSD file. """ def __init__( self, version=enums.Version.version_1, # type: int num_channels=1, # type: int height=1, # type: int width=1, # type: int depth=enums.ColorDepth.depth8, # type: int color_mode=enums.ColorMode.rgb, # type: int color_mode_data=None, # type: Optional[ColorModeData] image_resources=None, # type: Optional[ImageResources] layer_and_mask_info=None, # type: Optional[LayerAndMaskInfo] image_data=None, # type: Optional[ImageData] compression=enums.Compression.raw # type: int ): # type: (...) -> None Header.__init__( self, version=version, num_channels=num_channels, height=height, width=width, depth=depth, color_mode=color_mode ) if color_mode_data is None: color_mode_data = ColorModeData() self.color_mode_data = color_mode_data if image_resources is None: image_resources = ImageResources() self.image_resources = image_resources if layer_and_mask_info is None: layer_and_mask_info = LayerAndMaskInfo() self.layer_and_mask_info = layer_and_mask_info if image_data is None: image_data = ImageData(compression=compression) self.image_data = image_data @property def color_mode_data(self): # type: (...) -> ColorModeData 'Color mode data section. See `color_mode.ColorModeData`.' return self._color_mode_data @color_mode_data.setter def color_mode_data(self, value): # type: (ColorModeData) -> None if not isinstance(value, ColorModeData): raise TypeError("color_mode_data must be ColorModeData instance") self._color_mode_data = value @property def image_resources(self): # type: (...) -> ImageResources 'Image resources. See `image_resources.ImageResources`.' return self._image_resources @image_resources.setter def image_resources(self, value): # type: (ImageResources) -> None if not isinstance(value, ImageResources): raise TypeError("image_resources must be ImageResources instance") self._image_resources = value @property def layer_and_mask_info(self): # type: (...) -> LayerAndMaskInfo 'Image resources. See `image_resources.ImageResources`.' return self._layer_and_mask_info @layer_and_mask_info.setter def layer_and_mask_info(self, value): # type: (LayerAndMaskInfo) -> None if not isinstance(value, LayerAndMaskInfo): raise TypeError( "layer_and_mask_info must be LayerAndMaskInfo instance" ) self._layer_and_mask_info = value @property def image_data(self): # type: (...) -> ImageData 'Image data. See `image_data.ImageData`.' return self._image_data @image_data.setter def image_data(self, value): # type: (ImageData) -> None if not isinstance(value, ImageData): raise TypeError("image_data must be ImageData instance") self._image_data = value
[docs] @classmethod @util.trace_read def read(cls, fd): # type: (BinaryIO) -> PsdFile self = cls.header_read(fd) self.color_mode_data = ColorModeData.read(fd, self) self.image_resources = ImageResources.read(fd, self) self.layer_and_mask_info = LayerAndMaskInfo.read(fd, self) self.image_data = ImageData.read(fd, self) return self
read.__func__.__doc__ = docs.read_single
[docs] @util.trace_write def write(self, fd): # type: ignore Header.write(self, fd) self.color_mode_data.write(fd, self) self.image_resources.write(fd, self) self.layer_and_mask_info.write(fd, self) self.image_data.write(fd, self)
write.__doc__ = docs.write_single