"""
Various constants for psd_tools
"""
from enum import Enum, IntEnum, auto
class CompatibilityMode(Enum):
"""
Compatibility modes that describe how compositing and
layer control should attempt to behave.
"""
PHOTOSHOP = auto()
PAINT_TOOL_SAI = auto()
CLIP_STUDIO_PAINT = auto()
GIMP = auto()
KRITA = auto()
DEFAULT = PHOTOSHOP
[docs]
class ColorMode(IntEnum):
"""
Color mode.
"""
BITMAP = 0
GRAYSCALE = 1
INDEXED = 2
RGB = 3
CMYK = 4
MULTICHANNEL = 7
DUOTONE = 8
LAB = 9
[docs]
@staticmethod
def channels(value, alpha=False):
return {
ColorMode.BITMAP: 1,
ColorMode.GRAYSCALE: 1,
ColorMode.INDEXED: 1,
ColorMode.RGB: 3,
ColorMode.CMYK: 4,
ColorMode.MULTICHANNEL: 1,
ColorMode.DUOTONE: 1,
ColorMode.LAB: 3,
}.get(value) + alpha
[docs]
class ColorSpaceID(IntEnum):
"""
Color space types.
"""
RGB = 0
HSB = 1
CMYK = 2
LAB = 7
GRAYSCALE = 8
[docs]
class Resource(IntEnum):
"""
Image resource keys.
Note the following is not defined for performance reasons.
* PATH_INFO_10 to PATH_INFO_989 corresponding to 2010 - 2989
* PLUGIN_RESOURCES_10 to PLUGIN_RESOURCES_989 corresponding to
4010 - 4989
"""
OBSOLETE1 = 1000
MAC_PRINT_MANAGER_INFO = 1001
MAC_PAGE_FORMAT_INFO = 1002
OBSOLETE2 = 1003
RESOLUTION_INFO = 1005
ALPHA_NAMES_PASCAL = 1006
DISPLAY_INFO_OBSOLETE = 1007
CAPTION_PASCAL = 1008
BORDER_INFO = 1009
BACKGROUND_COLOR = 1010
PRINT_FLAGS = 1011
GRAYSCALE_HALFTONING_INFO = 1012
COLOR_HALFTONING_INFO = 1013
DUOTONE_HALFTONING_INFO = 1014
GRAYSCALE_TRANSFER_FUNCTION = 1015
COLOR_TRANSFER_FUNCTION = 1016
DUOTONE_TRANSFER_FUNCTION = 1017
DUOTONE_IMAGE_INFO = 1018
EFFECTIVE_BW = 1019
OBSOLETE3 = 1020
EPS_OPTIONS = 1021
QUICK_MASK_INFO = 1022
OBSOLETE4 = 1023
LAYER_STATE_INFO = 1024
WORKING_PATH = 1025
LAYER_GROUP_INFO = 1026
OBSOLETE5 = 1027
IPTC_NAA = 1028
IMAGE_MODE_RAW = 1029
JPEG_QUALITY = 1030
GRID_AND_GUIDES_INFO = 1032
THUMBNAIL_RESOURCE_PS4 = 1033
COPYRIGHT_FLAG = 1034
URL = 1035
THUMBNAIL_RESOURCE = 1036
GLOBAL_ANGLE = 1037
COLOR_SAMPLERS_RESOURCE_OBSOLETE = 1038
ICC_PROFILE = 1039
WATERMARK = 1040
ICC_UNTAGGED_PROFILE = 1041
EFFECTS_VISIBLE = 1042
SPOT_HALFTONE = 1043
IDS_SEED_NUMBER = 1044
ALPHA_NAMES_UNICODE = 1045
INDEXED_COLOR_TABLE_COUNT = 1046
TRANSPARENCY_INDEX = 1047
GLOBAL_ALTITUDE = 1049
SLICES = 1050
WORKFLOW_URL = 1051
JUMP_TO_XPEP = 1052
ALPHA_IDENTIFIERS = 1053
URL_LIST = 1054
VERSION_INFO = 1057
EXIF_DATA_1 = 1058
EXIF_DATA_3 = 1059
XMP_METADATA = 1060
CAPTION_DIGEST = 1061
PRINT_SCALE = 1062
PIXEL_ASPECT_RATIO = 1064
LAYER_COMPS = 1065
ALTERNATE_DUOTONE_COLORS = 1066
ALTERNATE_SPOT_COLORS = 1067
LAYER_SELECTION_IDS = 1069
HDR_TONING_INFO = 1070
PRINT_INFO_CS2 = 1071
LAYER_GROUPS_ENABLED_ID = 1072
COLOR_SAMPLERS_RESOURCE = 1073
MEASUREMENT_SCALE = 1074
TIMELINE_INFO = 1075
SHEET_DISCLOSURE = 1076
DISPLAY_INFO = 1077
ONION_SKINS = 1078
COUNT_INFO = 1080
PRINT_INFO_CS5 = 1082
PRINT_STYLE = 1083
MAC_NSPRINTINFO = 1084
WINDOWS_DEVMODE = 1085
AUTO_SAVE_FILE_PATH = 1086
AUTO_SAVE_FORMAT = 1087
PATH_SELECTION_STATE = 1088
PATH_INFO_0 = 2000
PATH_INFO_1 = 2001
PATH_INFO_2 = 2002
PATH_INFO_3 = 2003
PATH_INFO_4 = 2004
PATH_INFO_5 = 2005
PATH_INFO_6 = 2006
PATH_INFO_7 = 2007
PATH_INFO_8 = 2008
PATH_INFO_9 = 2009
# PATH_INFO 2010-2989 is not defined for performance reasons.
PATH_INFO_990 = 2990
PATH_INFO_991 = 2991
PATH_INFO_992 = 2992
PATH_INFO_993 = 2993
PATH_INFO_994 = 2994
PATH_INFO_995 = 2995
PATH_INFO_996 = 2996
PATH_INFO_997 = 2997
CLIPPING_PATH_NAME = 2999
ORIGIN_PATH_INFO = 3000
PLUGIN_RESOURCE_0 = 4000
PLUGIN_RESOURCE_1 = 4001
PLUGIN_RESOURCE_2 = 4002
PLUGIN_RESOURCE_3 = 4003
PLUGIN_RESOURCE_4 = 4004
PLUGIN_RESOURCE_5 = 4005
PLUGIN_RESOURCE_6 = 4006
PLUGIN_RESOURCE_7 = 4007
PLUGIN_RESOURCE_8 = 4008
PLUGIN_RESOURCE_9 = 4009
# PLUGIN_RESOURCE 4010-4989 is not defined for performance reasons.
PLUGIN_RESOURCE_4990 = 4990
PLUGIN_RESOURCE_4991 = 4991
PLUGIN_RESOURCE_4992 = 4992
PLUGIN_RESOURCE_4993 = 4993
PLUGIN_RESOURCE_4994 = 4994
PLUGIN_RESOURCE_4995 = 4995
PLUGIN_RESOURCE_4996 = 4996
PLUGIN_RESOURCE_4997 = 4997
PLUGIN_RESOURCE_4998 = 4998
PLUGIN_RESOURCE_4999 = 4990
IMAGE_READY_VARIABLES = 7000
IMAGE_READY_DATA_SETS = 7001
IMAGE_READY_DEFAULT_SELECTED_STATE = 7002
IMAGE_READY_7_ROLLOVER_EXPANDED_STATE = 7003
IMAGE_READY_ROLLOVER_EXPANDED_STATE = 7004
IMAGE_READY_SAVE_LAYER_SETTINGS = 7005
IMAGE_READY_VERSION = 7006
LIGHTROOM_WORKFLOW = 8000
PRINT_FLAGS_INFO = 10000
[docs]
@staticmethod
def is_path_info(value):
return 2000 <= value and value <= 2997
[docs]
@staticmethod
def is_plugin_resource(value):
return 4000 <= value and value <= 4999
ImageResourceID = Resource # For backward compatibility.
[docs]
class LinkedLayerType(bytes, Enum):
"""
Linked layer types.
"""
DATA = b"liFD"
EXTERNAL = b"liFE"
ALIAS = b"liFA"
[docs]
class ChannelID(IntEnum):
"""
Channel types.
"""
CHANNEL_0 = 0 # Red, Cyan, Gray, ...
CHANNEL_1 = 1 # Green, Magenta, ...
CHANNEL_2 = 2 # Blue, Yellow, ...
CHANNEL_3 = 3 # Black, ...
CHANNEL_4 = 4
CHANNEL_5 = 5
CHANNEL_6 = 6
CHANNEL_7 = 7
CHANNEL_8 = 8
CHANNEL_9 = 9
TRANSPARENCY_MASK = -1
USER_LAYER_MASK = -2
REAL_USER_LAYER_MASK = -3
[docs]
class Clipping(IntEnum):
"""Clipping."""
BASE = 0
NON_BASE = 1
[docs]
class BlendMode(bytes, Enum):
"""
Blend modes.
"""
PASS_THROUGH = b"pass"
NORMAL = b"norm"
DISSOLVE = b"diss"
DARKEN = b"dark"
MULTIPLY = b"mul "
COLOR_BURN = b"idiv"
LINEAR_BURN = b"lbrn"
DARKER_COLOR = b"dkCl"
LIGHTEN = b"lite"
SCREEN = b"scrn"
COLOR_DODGE = b"div "
LINEAR_DODGE = b"lddg"
LIGHTER_COLOR = b"lgCl"
OVERLAY = b"over"
SOFT_LIGHT = b"sLit"
HARD_LIGHT = b"hLit"
VIVID_LIGHT = b"vLit"
LINEAR_LIGHT = b"lLit"
PIN_LIGHT = b"pLit"
HARD_MIX = b"hMix"
DIFFERENCE = b"diff"
EXCLUSION = b"smud"
SUBTRACT = b"fsub"
DIVIDE = b"fdiv"
HUE = b"hue "
SATURATION = b"sat "
COLOR = b"colr"
LUMINOSITY = b"lum "
[docs]
class GlobalLayerMaskKind(IntEnum):
"""Global layer mask kind."""
COLOR_SELECTED = 0
COLOR_PROTECTED = 1
PER_LAYER = 128
# others options are possible in beta versions.
[docs]
class Compression(IntEnum):
"""
Compression modes.
Compression. 0 = Raw Data, 1 = RLE compressed, 2 = ZIP without prediction,
3 = ZIP with prediction.
"""
RAW = 0
RLE = 1
ZIP = 2
ZIP_WITH_PREDICTION = 3
[docs]
class Tag(bytes, Enum):
"""Tagged blocks keys."""
ALPHA = b"Alph" # Undocumented.
ANIMATION_EFFECTS = b"anFX"
ANNOTATIONS = b"Anno"
ARTBOARD_DATA1 = b"artb"
ARTBOARD_DATA2 = b"artd"
ARTBOARD_DATA3 = b"abdd"
BLACK_AND_WHITE = b"blwh"
BLEND_CLIPPING_ELEMENTS = b"clbl"
BLEND_FILL_OPACITY = b"iOpa" # Undocumented.
BLEND_INTERIOR_ELEMENTS = b"infx"
BRIGHTNESS_AND_CONTRAST = b"brit"
CHANNEL_BLENDING_RESTRICTIONS_SETTING = b"brst"
CHANNEL_MIXER = b"mixr"
COLOR_BALANCE = b"blnc"
COLOR_LOOKUP = b"clrL"
COMPOSITOR_INFO = b"cinf" # Undocumented.
CONTENT_GENERATOR_EXTRA_DATA = b"CgEd"
CURVES = b"curv"
EFFECTS_LAYER = b"lrFX"
EXPORT_SETTING1 = b"extd" # Undocumented.
EXPORT_SETTING2 = b"extn" # Undocumented.
EXPOSURE = b"expA"
FILTER_EFFECTS1 = b"FXid"
FILTER_EFFECTS2 = b"FEid"
FILTER_EFFECTS3 = b"FELS" # Undocumented.
FILTER_MASK = b"FMsk"
FOREIGN_EFFECT_ID = b"ffxi"
FRAMED_GROUP = b"frgb" # Undocumented, Frame tool in CC 2019?
GRADIENT_FILL_SETTING = b"GdFl"
GRADIENT_MAP = b"grdm"
HUE_SATURATION = b"hue2"
HUE_SATURATION_V4 = b"hue "
INVERT = b"nvrt"
KNOCKOUT_SETTING = b"knko"
LAYER = b"Layr"
LAYER_16 = b"Lr16"
LAYER_32 = b"Lr32"
LAYER_ID = b"lyid"
LAYER_MASK_AS_GLOBAL_MASK = b"lmgm"
LAYER_NAME_SOURCE_SETTING = b"lnsr"
LAYER_VERSION = b"lyvr"
LEVELS = b"levl"
LINKED_LAYER1 = b"lnkD"
LINKED_LAYER2 = b"lnk2"
LINKED_LAYER3 = b"lnk3"
LINKED_LAYER_EXTERNAL = b"lnkE"
METADATA_SETTING = b"shmd"
NESTED_SECTION_DIVIDER_SETTING = b"lsdk"
OBJECT_BASED_EFFECTS_LAYER_INFO = b"lfx2"
OBJECT_BASED_EFFECTS_LAYER_INFO_V0 = b"lmfx" # Undocumented.
OBJECT_BASED_EFFECTS_LAYER_INFO_V1 = b"lfxs" # Undocumented.
PATTERNS1 = b"Patt"
PATTERNS2 = b"Pat2"
PATTERNS3 = b"Pat3"
PATTERN_DATA = b"shpa"
PATTERN_FILL_SETTING = b"PtFl"
PHOTO_FILTER = b"phfl"
PIXEL_SOURCE_DATA1 = b"PxSc"
PIXEL_SOURCE_DATA2 = b"PxSD"
PLACED_LAYER1 = b"plLd"
PLACED_LAYER2 = b"PlLd"
POSTERIZE = b"post"
PROTECTED_SETTING = b"lspf"
REFERENCE_POINT = b"fxrp"
SAVING_MERGED_TRANSPARENCY = b"Mtrn"
SAVING_MERGED_TRANSPARENCY16 = b"Mt16"
SAVING_MERGED_TRANSPARENCY32 = b"Mt32"
SECTION_DIVIDER_SETTING = b"lsct"
SELECTIVE_COLOR = b"selc"
SHEET_COLOR_SETTING = b"lclr"
SMART_OBJECT_LAYER_DATA1 = b"SoLd"
SMART_OBJECT_LAYER_DATA2 = b"SoLE"
SOLID_COLOR_SHEET_SETTING = b"SoCo"
TEXT_ENGINE_DATA = b"Txt2"
THRESHOLD = b"thrs"
TRANSPARENCY_SHAPES_LAYER = b"tsly"
TYPE_TOOL_INFO = b"tySh"
TYPE_TOOL_OBJECT_SETTING = b"TySh"
UNICODE_LAYER_NAME = b"luni"
UNICODE_PATH_NAME = b"pths"
USER_MASK = b"LMsk"
USING_ALIGNED_RENDERING = b"sn2P"
VECTOR_MASK_AS_GLOBAL_MASK = b"vmgm"
VECTOR_MASK_SETTING1 = b"vmsk"
VECTOR_MASK_SETTING2 = b"vsms"
VECTOR_ORIGINATION_DATA = b"vogk"
VECTOR_ORIGINATION_UNKNOWN = b"vowv"
VECTOR_STROKE_DATA = b"vstk"
VECTOR_STROKE_CONTENT_DATA = b"vscg"
VIBRANCE = b"vibA"
# Unknown
PATT = b"patt"
TaggedBlockID = Tag # For backward compatibility.
[docs]
class PrintScaleStyle(IntEnum):
"""Print scale style."""
CENTERED = 0
SIZE_TO_FIT = 1
USER_DEFINED = 2
class OSType(bytes, Enum):
"""
Descriptor OSTypes and reference OSTypes.
"""
# OS types
REFERENCE = b"obj "
DESCRIPTOR = b"Objc"
LIST = b"VlLs"
DOUBLE = b"doub"
UNIT_FLOAT = b"UntF"
UNIT_FLOATS = b"UnFl" # Undocumented
STRING = b"TEXT"
ENUMERATED = b"enum"
INTEGER = b"long"
LARGE_INTEGER = b"comp"
BOOLEAN = b"bool"
GLOBAL_OBJECT = b"GlbO"
CLASS1 = b"type"
CLASS2 = b"GlbC"
ALIAS = b"alis"
RAW_DATA = b"tdta"
OBJECT_ARRAY = b"ObAr" # Undocumented
PATH = b"Pth " # Undocumented
# Reference OS types
PROPERTY = b"prop"
CLASS3 = b"Clss"
ENUMERATED_REFERENCE = b"Enmr"
OFFSET = b"rele"
IDENTIFIER = b"Idnt"
INDEX = b"indx"
NAME = b"name"
[docs]
class EffectOSType(bytes, Enum):
"""
OS Type keys for Layer Effects.
"""
COMMON_STATE = b"cmnS"
DROP_SHADOW = b"dsdw"
INNER_SHADOW = b"isdw"
OUTER_GLOW = b"oglw"
INNER_GLOW = b"iglw"
BEVEL = b"bevl"
SOLID_FILL = b"sofi"
[docs]
class PathResourceID(IntEnum):
CLOSED_LENGTH = 0
CLOSED_KNOT_LINKED = 1
CLOSED_KNOT_UNLINKED = 2
OPEN_LENGTH = 3
OPEN_KNOT_LINKED = 4
OPEN_KNOT_UNLINKED = 5
PATH_FILL = 6
CLIPBOARD = 7
INITIAL_FILL = 8
[docs]
class PlacedLayerType(IntEnum):
UNKNOWN = 0
VECTOR = 1
RASTER = 2
IMAGE_STACK = 3
[docs]
class SectionDivider(IntEnum):
OTHER = 0
OPEN_FOLDER = 1
CLOSED_FOLDER = 2
BOUNDING_SECTION_DIVIDER = 3
class SheetColorType(IntEnum):
NO_COLOR = 0
RED = 1
ORANGE = 2
YELLOW = 3
GREEN = 4
BLUE = 5
VIOLET = 6
GRAY = 7
SEAFOAM = 8
INDIGO = 9
MAGENTA = 10
FUSCHIA = 11