# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals, print_function
import warnings
import io

from psd_tools.constants import TaggedBlock, SectionDivider, BlendMode, SectionDividerSub
from psd_tools.decoder.actions import decode_descriptor, UnknownOSType
from psd_tools.decoder.color import decode_color
from psd_tools.utils import read_fmt, unpack
from psd_tools.decoder import decoders, layer_effects, linked_layer
from psd_tools.reader.layers import Block
from psd_tools.debug import pretty_namedtuple
from psd_tools.exceptions import Error

_tagged_block_decoders, register = decoders.new_registry()

_tagged_block_decoders.update(
    {
        TaggedBlock.BLEND_CLIPPING_ELEMENTS: decoders.boolean,
        TaggedBlock.BLEND_INTERIOR_ELEMENTS: decoders.boolean,
        TaggedBlock.KNOCKOUT_SETTING: decoders.boolean,
        TaggedBlock.UNICODE_LAYER_NAME: decoders.unicode_string,
        TaggedBlock.LAYER_ID: decoders.single_value("I"),
        TaggedBlock.FILL_OPACITY: decoders.single_value("B"),
        TaggedBlock.EFFECTS_LAYER: layer_effects.decode,
        TaggedBlock.OBJECT_BASED_EFFECTS_LAYER_INFO: layer_effects.decode_object_based,
        TaggedBlock.LINKED_LAYER1: linked_layer.decode,
        TaggedBlock.LINKED_LAYER2: linked_layer.decode,
        TaggedBlock.LINKED_LAYER3: linked_layer.decode,
    }
)
Exemple #2
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals, division
import io
import warnings
import collections

from psd_tools.utils import (read_pascal_string, unpack, read_fmt,
                             read_unicode_string, be_array_from_bytes,
                             decode_fixed_point_32bit)
from psd_tools.constants import ImageResourceID, PrintScaleStyle, DisplayResolutionUnit, DimensionUnit
from psd_tools.decoder import decoders
from psd_tools.decoder.actions import decode_descriptor, UnknownOSType
from psd_tools.decoder.color import decode_color

_image_resource_decoders, register = decoders.new_registry()

_image_resource_decoders.update({
    ImageResourceID.LAYER_STATE_INFO:
    decoders.single_value("H"),
    ImageResourceID.WATERMARK:
    decoders.single_value("B"),
    ImageResourceID.ICC_UNTAGGED_PROFILE:
    decoders.boolean(),
    ImageResourceID.EFFECTS_VISIBLE:
    decoders.boolean(),
    ImageResourceID.IDS_SEED_NUMBER:
    decoders.single_value("I"),
    ImageResourceID.INDEXED_COLOR_TABLE_COUNT:
    decoders.single_value("H"),
    ImageResourceID.TRANSPARENCY_INDEX:
    decoders.single_value("H"),
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals, division
import io
import warnings
import collections

from psd_tools.utils import (read_pascal_string, unpack, read_fmt,
                             read_unicode_string, be_array_from_bytes,
                             decode_fixed_point_32bit)
from psd_tools.constants import ImageResourceID, PrintScaleStyle, DisplayResolutionUnit, DimensionUnit
from psd_tools.decoder import decoders
from psd_tools.decoder.actions import decode_descriptor, UnknownOSType

_image_resource_decoders, register = decoders.new_registry()

_image_resource_decoders.update({
    ImageResourceID.LAYER_STATE_INFO:           decoders.single_value("H"),
    ImageResourceID.WATERMARK:                  decoders.single_value("B"),
    ImageResourceID.ICC_UNTAGGED_PROFILE:       decoders.boolean(),
    ImageResourceID.EFFECTS_VISIBLE:            decoders.boolean(),
    ImageResourceID.IDS_SEED_NUMBER:            decoders.single_value("I"),
    ImageResourceID.INDEXED_COLOR_TABLE_COUNT:  decoders.single_value("H"),
    ImageResourceID.TRANSPARENCY_INDEX:         decoders.single_value("H"),
    ImageResourceID.GLOBAL_ALTITUDE:            decoders.single_value("I"),
    ImageResourceID.GLOBAL_ANGLE_OBSOLETE:      decoders.single_value("I"),
    ImageResourceID.COPYRIGHT_FLAG:             decoders.boolean("H"),

    ImageResourceID.ALPHA_NAMES_UNICODE:        decoders.unicode_string,
    ImageResourceID.WORKFLOW_URL:               decoders.unicode_string,
})
Exemple #4
0
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals, print_function
import warnings
import io

from psd_tools.decoder import decoders
from psd_tools.decoder.actions import decode_descriptor, UnknownOSType
from psd_tools.decoder.color import decode_color
from psd_tools.exceptions import Error
from psd_tools.utils import read_fmt
from psd_tools.constants import EffectOSType, BlendMode
from psd_tools.debug import pretty_namedtuple

_effect_info_decoders, register = decoders.new_registry()


Effects = pretty_namedtuple('Effects', 'version effects_count effects_list')
_LayerEffect = pretty_namedtuple('LayerEffect', 'effect_type effect_info')
ObjectBasedEffects = pretty_namedtuple('ObjectBasedEffects', 'version descriptor_version descriptor')

CommonStateInfo = pretty_namedtuple('CommonStateInfo', 'version visible unused')
ShadowInfo = pretty_namedtuple('ShadowInfo', 'version enabled '
                                             'blend_mode color opacity '
                                             'angle use_global_angle '
                                             'distance intensity blur '
                                             'native_color')
OuterGlowInfo = pretty_namedtuple('OuterGlowInfo', 'version enabled '
                                                   'blend_mode opacity color '
                                                   'intensity blur '
                                                   'native_color')
InnerGlowInfo = pretty_namedtuple('InnerGlowInfo', 'version enabled '
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals, print_function
import warnings
import collections
import io
from psd_tools.decoder.parseEngineData import paresr

from psd_tools.constants import TaggedBlock, SectionDivider, OSType
from psd_tools.decoder.actions import decode_descriptor, UnknownOSType
from psd_tools.utils import read_fmt, unpack
from psd_tools.decoder import decoders, layer_effects
from psd_tools.reader.layers import Block
from psd_tools.debug import pretty_namedtuple

_tagged_block_decoders, register = decoders.new_registry()

_tagged_block_decoders.update({
    TaggedBlock.BLEND_CLIPPING_ELEMENTS:
    decoders.boolean("I"),
    TaggedBlock.BLEND_INTERIOR_ELEMENTS:
    decoders.boolean("I"),
    TaggedBlock.KNOCKOUT_SETTING:
    decoders.boolean("I"),
    TaggedBlock.UNICODE_LAYER_NAME:
    decoders.unicode_string,
    TaggedBlock.LAYER_ID:
    decoders.single_value(
        "I"
    ),  # XXX: there are more fields in docs, but they seem to be incorrect
    TaggedBlock.EFFECTS_LAYER:
    layer_effects.decode,
Exemple #6
0
class EngineDataDecoder(object):
    """
    Engine data decoder.
    """
    _decoders, register = decoders.new_registry()

    def __init__(self, data, divider=b'[ \n\t]+'):
        self.node_stack = [{}]
        self.prop_stack = [b'Root']
        self.data = data
        self.tokenizer = EngineTokenizer(divider=divider)

    def parse(self):
        for token in self.tokenizer.tokenize(self.data):
            value = self._parse_token(token)

            if value is not None:
                if isinstance(self.node_stack[-1], list):
                    self.node_stack[-1].append(value)
                else:
                    self.node_stack[-1][self.prop_stack[-1]] = value

        return self.node_stack[0].get(b'Root', self.node_stack[0])

    def _parse_token(self, token):
        patterns = EngineToken._values_dict()
        for pattern in patterns:
            match = pattern.search(token)
            if match:
                return self._decoders[pattern](self, match)
        raise InvalidTokenError("Unknown token: {}".format(token))

    @register(EngineToken.ARRAY_END)
    def _decode_array_end(self, match):
        return self.node_stack.pop()

    @register(EngineToken.ARRAY_START)
    def _decode_array_start(self, match):
        self.node_stack.append([])

    @register(EngineToken.BOOLEAN)
    def _decode_boolean(self, match):
        return True if match.group(1) == b'true' else False

    @register(EngineToken.DICT_END)
    def _decode_dict_end(self, match):
        self.prop_stack.pop()
        return self.node_stack.pop()

    @register(EngineToken.DICT_START)
    def _decode_dict_start(self, match):
        self.prop_stack.append(None)
        self.node_stack.append({})

    @register(EngineToken.NOOP)
    def _decode_noop(self, match):
        pass

    @register(EngineToken.NUMBER)
    def _decode_number(self, match):
        return int(match.group(1))

    @register(EngineToken.NUMBER_WITH_DECIMAL)
    def _decode_number_with_decimal(self, match):
        return float(match.group(0))

    @register(EngineToken.PROPERTY)
    def _decode_property(self, match):
        self.prop_stack[-1] = match.group(1)

    @register(EngineToken.STRING)
    def _decode_string(self, match):
        # UTF-16 is backslash-escaped here.
        return re.sub(b'\\\\(.)', b'\\1',
                      match.group(1)).decode('utf-16', 'replace')

    @register(EngineToken.UNKNOWN_TAG)
    def _decode_unknown_tag(self, match):
        return match
Exemple #7
0
from psd_tools.decoder.tagged_blocks import (
    SolidColorSetting, PatternFillSetting, GradientFillSetting,
    VectorStrokeSetting, VectorMaskSetting, VectorStrokeContentSetting,
    ContentGeneratorExtraData, LevelsSettings, CurvesSettings, Exposure,
    Vibrance, HueSaturation, ColorBalance, BlackWhite, PhotoFilter,
    ChannelMixer, ColorLookup, Invert, Posterize, Threshold, SelectiveColor,
    GradientSettings, VectorOriginationData)
from psd_tools.decoder.layer_effects import ObjectBasedEffects
from psd_tools.user_api.effects import (
    GradientOverlay, PatternOverlay, ColorOverlay)
from psd_tools.user_api import adjustments, BBox

from psd_tools.user_api.shape import StrokeStyle, VectorMask, Origination


_translators, register = new_registry()
_desc_translators, desc_register = new_registry()

#: Point object, x and y attributes.
Point = pretty_namedtuple('Point', 'x y')

#: Shape object, contains list of points in curve.
Shape = pretty_namedtuple('Shape', 'name curve')

#: Pattern object.
Pattern = pretty_namedtuple('Pattern', 'name id')

_Gradient = pretty_namedtuple(
    'Gradient', 'desc_name name type smoothness colors transform')

#: StopColor in gradient.
Exemple #8
0
from psd_tools.exceptions import Error
from psd_tools.utils import read_fmt, read_unicode_string, read_pascal_string, read_be_array
from psd_tools.constants import EffectOSType, BlendMode, Compression
from psd_tools.debug import pretty_namedtuple
from psd_tools.reader.layers import ChannelData

from psd_tools.user_api.pil_support import get_icc_profile, _get_header_channel_ids, _channel_data_to_PIL
#from sys import getsizeof

#import packbits
#from pymaging.image import LoadedImage
#from pymaging.pixelarray import get_pixel_array
#from pymaging.colors import RGB, RGBA
#from user_api.pyimaging_support import _get_mode

_effect_info_decoders, register = decoders.new_registry()

Effects = pretty_namedtuple('Effects', 'version effects_count effects_list')
_LayerEffect = pretty_namedtuple('LayerEffect', 'effect_type effect_info')
ObjectBasedEffects = pretty_namedtuple(
    'ObjectBasedEffects', 'version descriptor_version descriptor')

CommonStateInfo = pretty_namedtuple('CommonStateInfo',
                                    'version visible unused')
ShadowInfo = pretty_namedtuple(
    'ShadowInfo', 'version enabled '
    'blend_mode color opacity '
    'angle use_global_angle '
    'distance intensity blur '
    'native_color')
OuterGlowInfo = pretty_namedtuple(