def test_write_length_block(): data = b'\x00\x00\x00\x07\x01\x01\x01\x01\x01\x01\x01\x00' body = data[4:11] with io.BytesIO() as f: write_length_block(f, lambda fp: fp.write(body), padding=1) assert f.getvalue() == data[:11] assert f.tell() == 11 with io.BytesIO() as f: write_length_block(f, lambda fp: fp.write(body), padding=2) assert f.getvalue() == data assert f.tell() == 12
def write(self, fp, **kwargs): written = 0 for item in self: written += write_length_block(fp, lambda f: item.write(f), padding=4) return written
def write(self, fp, padding=4, **kwargs): written = 0 for item in self: written += write_length_block(fp, lambda f: write_bytes(f, item), fmt='Q') written += write_padding(fp, written, padding) return written
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))
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
def write(self, fp): """Write the element to a file-like object. :param fp: file-like object """ def writer(f): return write_bytes(f, self.value) logger.debug('writing color mode data, len=%d' % (len(self.value))) return write_length_block(fp, writer)
def write(self, fp, encoding='macroman'): """Write the element to a file-like object. :param fp: file-like object """ def writer(f): written = sum(self[key].write(f, encoding) for key in self) logger.debug('writing image resources, len=%d' % (written)) return written return write_length_block(fp, writer)
def write(self, fp): """Write the element to a file-like object. :param fp: file-like object """ def writer(f): if hasattr(self.value, 'write'): return self.value.write(f) return write_bytes(f, self.value) return write_length_block(fp, writer)
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
def write(self, fp, **kwargs): written = write_pascal_string(fp, self.uuid, encoding='ascii', padding=1) written += write_fmt(fp, 'I', self.version) def writer(f): return self._write_body(f) written += write_length_block(fp, writer, fmt='Q') if self.extra is not None: written += self.extra.write(fp) return written
def write(self, fp, **kwargs): written = write_fmt(fp, '4s4s?3x', self.signature, self.key, self.copy_on_sheet) def writer(f): if hasattr(self.data, 'write'): return self.data.write(f, padding=4) elif isinstance(self.data, int): return write_fmt(fp, 'I', self.data) return write_bytes(f, self.data) written += write_length_block(fp, writer) return written
def write(self, fp, encoding='macroman', version=1, padding=4): """Write the element to a file-like object. :param fp: file-like object :param encoding: encoding of the string :param version: psd file version """ def writer(f): written = self._write_body(f, encoding, version, padding) logger.debug('writing layer and mask info, len=%d' % (written)) return written fmt = ('I', 'Q')[version - 1] return write_length_block(fp, writer, fmt=fmt)
def write(self, fp, **kwargs): written = write_fmt(fp, 'I', self.is_written) if self.is_written == 0: return written def writer(f): if self.compression is None: return 0 length = write_fmt(f, 'H', self.compression) length += write_bytes(f, self.data) return length written += write_length_block(fp, writer, fmt='Q') return written
def write(self, fp, encoding='macroman', version=1, padding=4): """Write the element to a file-like object. :param fp: file-like object :rtype: int """ def writer(f): written = self._write_body(f, encoding, version, padding) logger.debug('writing layer info, len=%d' % (written)) return written fmt = ('I', 'Q')[version - 1] if self.layer_count == 0: return write_fmt(fp, fmt, 0) return write_length_block(fp, writer, fmt=fmt)
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
def write(self, fp, encoding='macroman'): """Write the element to a file-like object. :param fp: file-like object :rtype: int """ written = write_fmt(fp, '4sH', self.signature, getattr(self.key, 'value', self.key)) written += write_pascal_string(fp, self.name, encoding, 2) def writer(f): if hasattr(self.data, 'write'): return self.data.write(f, padding=1) return write_bytes(f, self.data) written += write_length_block(fp, writer, padding=2) return written
def write(self, fp, version=1, padding=1): """Write the element to a file-like object. :param fp: file-like object :param version: psd file version """ key = self.key if isinstance(self.key, bytes) else self.key.value written = write_fmt(fp, '4s4s', self.signature, key) def writer(f): if hasattr(self.data, 'write'): # It seems padding size applies at the block level here. inner_padding = 1 if padding == 4 else 4 return self.data.write(f, padding=inner_padding, version=version) return write_bytes(f, self.data) fmt = self._length_format(self.key, version) written += write_length_block(fp, writer, fmt=fmt, padding=padding) return written
def write(self, fp, encoding='macroman', version=1): """Write the element to a file-like object. :param fp: file-like object :param encoding: encoding of the string :param version: psd file version """ start_pos = fp.tell() written = write_fmt(fp, '4iH', self.top, self.left, self.bottom, self.right, len(self.channel_info)) written += sum(c.write(fp, version) for c in self.channel_info) written += write_fmt(fp, '4s4sBB', self.signature, self.blend_mode.value, self.opacity, self.clipping.value) written += self.flags.write(fp) def writer(f): written = self._write_extra(f, encoding, version) logger.debug(' wrote layer record, len=%d' % (fp.tell() - start_pos)) return written written += write_length_block(fp, writer, fmt='xI') return written
def write(self, fp): """Write the element to a file-like object. :param fp: file-like object """ return write_length_block(fp, lambda f: self._write_body(f))
def write(self, fp, **kwargs): written = write_fmt(fp, 'I', self.version) for item in self: written += write_length_block(fp, lambda f: item.write(f), fmt='Q', padding=4) return written
def write(self, fp, **kwargs): written = write_fmt(fp, 'I', self.version) return written + write_length_block(fp, lambda f: self._write_body(f))