コード例 #1
0
 def _write_body(self, fp):
     written = write_fmt(fp, 'I', self.depth)
     written += write_fmt(fp, '4I', *self.rectangle)
     written += write_fmt(fp, 'HB', self.pixel_depth,
                          self.compression.value)
     written += write_bytes(fp, self.data)
     return written
コード例 #2
0
 def write(self, fp):
     written = write_fmt(fp, 'I4s4s', self.version, b'8BIM',
                         self.blend_mode.value)
     written += self.color.write(fp)
     written += write_fmt(fp, '2B', self.opacity, self.enabled)
     written += self.native_color.write(fp)
     return written
コード例 #3
0
 def write(self, fp, **kwargs):
     written = write_fmt(fp, 'I', int(self.freq * 0x10000))
     written += write_fmt(fp, 'H', self.unit)
     written += write_fmt(fp, 'i', int(self.angle * 0x10000))
     written += write_fmt(fp, 'H4x2?', self.shape, self.use_accurate,
                          self.use_printer)
     return written
コード例 #4
0
ファイル: tagged_blocks.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, 'I', self.kind.value)
     if self.signature and self.key:
         written += write_fmt(fp, '4s4s', self.signature, self.key.value)
         if self.sub_type is not None:
             written += write_fmt(fp, 'I', self.sub_type)
     return written
コード例 #5
0
ファイル: adjustments.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, '3h', *self.shadows)
     written += write_fmt(fp, '3h', *self.midtones)
     written += write_fmt(fp, '3h', *self.highlights)
     written += write_fmt(fp, 'B', self.luminosity)
     written += write_padding(fp, written, 4)
     return written
コード例 #6
0
ファイル: adjustments.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, 'H', self.channel_id)
     if len(self.points) > 0 and isinstance(self.points[0], int):
         written += write_fmt(fp, '256B', *self.points)
     else:
         written += write_fmt(fp, 'H', len(self.points))
         written += sum(write_fmt(fp, '2H', *p) for p in self.points)
     return written
コード例 #7
0
ファイル: color.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     id = getattr(self.id, 'value', self.id)
     written = write_fmt(fp, 'H', id)
     if self.id == ColorSpaceID.LAB:
         written += write_fmt(fp, '4h', *self.values)
     else:
         written += write_fmt(fp, '4H', *self.values)
     return written
コード例 #8
0
ファイル: layer_and_mask.py プロジェクト: crazyrex/psd-tools2
 def _write_body(self, fp):
     written = 0
     if self.overlay_color is not None:
         written = write_fmt(fp, '5H', *self.overlay_color)
         written += write_fmt(fp, 'HB', self.opacity, self.kind.value)
         written += write_padding(fp, written, 4)
     logger.debug('writing global layer mask info, len=%d' % (written))
     return written
コード例 #9
0
ファイル: adjustments.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, 'HBx', self.version, self.enable)
     written += write_fmt(fp, '3h', *self.colorization)
     written += write_fmt(fp, '3h', *self.master)
     for item in self.items:
         written += write_fmt(fp, '4h', *item[0])
         written += write_fmt(fp, '3h', *item[1])
     written += write_padding(fp, written, 4)
     return written
コード例 #10
0
ファイル: tagged_blocks.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, padding=4, **kwargs):
     written = write_fmt(fp, '4sI', self.kind, self.version)
     written += write_pascal_string(fp, self.uuid, 'macroman', padding=1)
     written += write_fmt(fp, '4I', self.page, self.total_pages,
                          self.anti_alias, self.layer_type.value)
     written += write_fmt(fp, '8d', *self.transform)
     written += self.warp.write(fp, padding=1)
     written += write_padding(fp, written, padding)
     return written
コード例 #11
0
ファイル: tagged_blocks.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, '2HI', self.major_version, self.minor_version,
                         len(self))
     for item in self:
         data = item.tobytes()
         written += write_fmt(fp, 'I', len(data) + 4)
         written += write_bytes(fp, data)
     written += write_padding(fp, written, 4)
     return written
コード例 #12
0
ファイル: vector.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp):
     written = write_fmt(
         fp, 'HhH2I10s', len(self), self.operation, self._unknown1,
         self._unknown2, self.index, self._unknown3
     )
     for item in self:
         written += write_fmt(fp, 'H', item.selector.value)
         written += item.write(fp)
     return written
コード例 #13
0
    def write(self, fp, **kwargs):
        written = write_fmt(fp, 'I', self.is_written)
        if self.is_written == 0:
            return written
        if self.depth is None:
            written += write_fmt(fp, 'I', 0)
            return written

        return written + write_length_block(fp, lambda f: self._write_body(f))
コード例 #14
0
 def _write_body(self, fp):
     written = write_fmt(fp, 'III', self.version, self.blur,
                         self.intensity)
     written += self.color.write(fp)
     written += write_fmt(
         fp, '4s4s2B', b'8BIM', self.blend_mode.value, self.enabled,
         self.opacity
     )
     return written
コード例 #15
0
 def write(self, fp, **kwargs):
     written = write_fmt(fp, '2H', self.version, len(self))
     for key in self:
         written += write_fmt(fp, '4s4s', b'8BIM', key.value)
         written += write_length_block(
             fp, lambda f: self[key].write(f)
         )
     written += write_padding(fp, written, 4)
     return written
コード例 #16
0
ファイル: tagged_blocks.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, padding=4, **kwargs):
     written = write_fmt(fp, 'H6d', self.version, *self.transform)
     written += write_fmt(fp, 'H', self.text_version)
     written += self.text_data.write(fp, padding=1)
     written += write_fmt(fp, 'H', self.warp_version)
     written += self.warp.write(fp, padding=1)
     written += write_fmt(fp, '4i', self.left, self.top, self.right,
                          self.bottom)
     written += write_padding(fp, written, padding)
     return written
コード例 #17
0
ファイル: adjustments.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, 'H', self.version)
     if self.version == 3:
         written += write_fmt(fp, '3I', *self.xyz)
     else:
         written += write_fmt(fp, 'H4H', self.color_space,
                              *self.color_components)
     written += write_fmt(fp, 'IB', self.density, self.luminosity)
     written += write_padding(fp, written, 4)
     return written
コード例 #18
0
ファイル: layer_and_mask.py プロジェクト: crazyrex/psd-tools2
 def _write_body(self, fp):
     written = 0
     if self.composite_ranges is not None:
         for x in self.composite_ranges:
             written += write_fmt(fp, '2H', *x)
     if self.channel_ranges is not None:
         for channel in self.channel_ranges:
             for x in channel:
                 written += write_fmt(fp, '2H', *x)
     return written
コード例 #19
0
ファイル: filter_effects.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp):
        written = write_fmt(fp, 'B', self.is_written)

        def writer(f):
            length = write_fmt(f, 'H', self.compression)
            length += write_bytes(f, self.data)
            return length

        if self.is_written:
            written += write_fmt(fp, '4i', *self.rectangle)
            written += write_length_block(fp, writer, fmt='Q')
        return written
コード例 #20
0
 def write(self, fp):
     written = write_fmt(
         fp, 'IIIiI', self.version, self.blur, self.intensity,
         self.angle, self.distance
     )
     written += self.color.write(fp)
     written += write_fmt(
         fp, '4s4s3B', b'8BIM', self.blend_mode.value, self.enabled,
         self.use_global_angle, self.opacity
     )
     written += self.native_color.write(fp)
     return written
コード例 #21
0
ファイル: adjustments.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp, **kwargs):
        written = write_fmt(fp, 'H', self.version)
        for index in range(29):
            written += self[index].write(fp)

        if self.extra_version is not None:
            written += write_fmt(fp, '4sH', b'Lvls', self.extra_version)
            written += write_fmt(fp, 'H', len(self))
            for index in range(29, len(self)):
                written += self[index].write(fp)

        written += write_padding(fp, written, 4)
        return written
コード例 #22
0
 def write(self, fp, **kwargs):
     written = write_fmt(fp, '2I', self.version, self.image_mode.value)
     written += write_fmt(fp, '2h', *self.point)
     written += write_unicode_string(fp, self.name)
     written += write_pascal_string(fp,
                                    self.pattern_id,
                                    encoding='ascii',
                                    padding=1)
     if self.color_table:
         for row in self.color_table:
             written += write_fmt(fp, '3B', *row)
         written += write_fmt(fp, '4x')
     written += self.data.write(fp)
     return written
コード例 #23
0
ファイル: tagged_blocks.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, **kwargs):
     written = write_fmt(fp, '4s2BH', self.kind, self.is_open, self.flags,
                         self.optional_blocks)
     written += write_fmt(fp, '4i', *self.icon_location)
     written += write_fmt(fp, '4i', *self.popup_location)
     written += self.color.write(fp)
     written += write_pascal_string(fp, self.author, 'macroman', padding=2)
     written += write_pascal_string(fp, self.name, 'macroman', padding=2)
     written += write_pascal_string(fp,
                                    self.mod_date,
                                    'macroman',
                                    padding=2)
     written += write_fmt(fp, 'I4s', len(self.data) + 12, self.marker)
     written += write_length_block(fp, lambda f: write_bytes(f, self.data))
     return written
コード例 #24
0
ファイル: adjustments.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp, **kwargs):
        written = write_fmt(fp, 'BHI', self.is_map, self.version,
                            self.count_map)
        if self.is_map:
            written += sum(write_fmt(fp, '256B', *item) for item in self.data)
        else:
            for points in self.data:
                written += write_fmt(fp, 'H', len(points))
                written += sum(write_fmt(fp, '2H', *item) for item in points)

        if self.extra is not None:
            written += self.extra.write(fp)

        written += write_padding(fp, written, 4)
        return written
コード例 #25
0
ファイル: descriptor.py プロジェクト: crazyrex/psd-tools2
def write_length_and_key(fp, value):
    """
    Helper to write descriptor classID and key.
    """
    if isinstance(value, DescriptorClassID):
        length = (len(value.value) != 4) * len(value.value)
        written = write_fmt(fp, 'I', length)
        written += write_bytes(fp, value.value)
    elif value in _UNKNOWN_CLASS_ID:
        written = write_fmt(fp, 'I', 0)
        written += write_bytes(fp, value)
    else:
        written = write_fmt(fp, 'I', len(value))
        written += write_bytes(fp, value)
    return written
コード例 #26
0
ファイル: vector.py プロジェクト: crazyrex/psd-tools2
 def write(self, fp, padding=4):
     written = 0
     for item in self:
         written += write_fmt(fp, 'H', item.selector.value)
         written += item.write(fp)
     written += write_padding(fp, written, padding)
     return written
コード例 #27
0
ファイル: layer_and_mask.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp, version=1):
        """Write the element to a file-like object.

        :param fp: file-like object
        :param version: psd file version
        """
        return write_fmt(fp, ('hI', 'hQ')[version - 1], *attr.astuple(self))
コード例 #28
0
ファイル: descriptor.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp):
        """Write the element to a file-like object.

        :param fp: file-like object
        """
        return write_fmt(fp, '4sI%dd' % len(self.values), self.unit.value,
                         len(self.values), *self.values)
コード例 #29
0
ファイル: descriptor.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp):
        """Write the element to a file-like object.

        :param fp: file-like object
        """
        written = write_fmt(fp, 'I', self.items_count)
        written += self._write_body(fp)
        return written
コード例 #30
0
ファイル: linked_layer.py プロジェクト: crazyrex/psd-tools2
    def write(self, fp, padding=1, **kwargs):
        written = write_fmt(fp, '4sI', self.kind.value, self.version)
        written += write_pascal_string(fp, self.uuid, 'macroman', padding=1)
        written += write_unicode_string(fp, self.filename)
        written += write_fmt(fp, '4s4sQB', self.filetype, self.creator,
                             len(self.data) if self.data is not None else 0,
                             self.open_file is not None)
        if self.open_file is not None:
            written += self.open_file.write(fp, padding=1)

        if self.kind == LinkedLayerType.EXTERNAL:
            written += self.linked_file.write(fp, padding=1)
            if self.version > 3:
                written += write_fmt(fp, 'I4Bd', *self.timestamp)
            written += write_fmt(fp, 'Q', self.filesize)
            if self.version > 2:
                written += write_bytes(fp, self.data)
        elif self.kind == LinkedLayerType.ALIAS:
            written += write_fmt(fp, '8x')
        if self.kind == LinkedLayerType.DATA:
            written += write_bytes(fp, self.data)

        if self.child_id is not None:
            written += write_unicode_string(fp, self.child_id)
        if self.mod_time is not None:
            written += write_fmt(fp, 'd', self.mod_time)
        if self.lock_state is not None:
            written += write_fmt(fp, 'B', self.lock_state)

        if self.kind == LinkedLayerType.EXTERNAL and self.version == 2:
            written += write_bytes(fp, self.data)

        written += write_padding(fp, written, padding)
        return written