def test_layer_properties(): psd = PSDImage(decode_psd('clipping-mask2.psd')) assert psd.width assert psd.height assert psd.channels assert psd.viewbox for layer in psd.descendants(): assert layer.bbox
def test_api(): image = PSDImage(decode_psd('1layer.psd')) assert len(image.layers) == 1 layer = image.layers[0] assert layer.name == 'Фон' assert layer.bbox == (0, 0, 101, 55) assert layer.visible assert layer.opacity == 255 assert layer.blend_mode == BlendMode.NORMAL
def test_text(filename, layer_num, text): psd = PSDImage(decode_psd(filename)) layer = psd.layers[layer_num] assert layer.text == text assert len(layer.matrix) == 6 assert len(layer.fontset) == 3 # Specific to files. assert layer.writing_direction == 0 # Specific to files. assert layer.full_text.startswith(text) assert all([isinstance(span, dict) for span in layer.style_spans()])
def test_api(): image = PSDImage(decode_psd('1layer.psd')) assert len(image.layers) == 1 layer = image.layers[0] assert layer.name == 'Фон' assert layer.bbox == (0, 0, 101, 55) assert layer.left == 0 assert layer.right == 101 assert layer.top == 0 assert layer.bottom == 55 assert layer.visible assert layer.opacity == 255 assert layer.blend_mode == 'normal'
def test_shape_paths(): psd = PSDImage(decode_psd('gray1.psd')) assert psd.layers[1].has_vector_mask() vector_mask = psd.layers[1].vector_mask assert not vector_mask.invert assert not vector_mask.disabled assert not vector_mask.not_link assert len(vector_mask.paths) == 2 path = vector_mask.paths[0] assert len(path.knots) == path.num_knots assert path.closed path = vector_mask.paths[1] assert len(path.knots) == path.num_knots assert path.closed
def test_text(): psd = PSDImage(decode_psd('patterns.psd')) patterns = psd.patterns assert len(patterns) == 6 try: from PIL import Image for pattern_id in patterns: pattern = patterns[pattern_id] image = pattern.as_PIL() assert image.width == pattern.width assert image.height == pattern.height except ImportError: pass
def test_userapi_placed_layers(): img = PSDImage(decode_psd("placedLayer.psd")) bg = img.layers[3] assert bg.placed_layer_size is None assert bg.transform_bbox is None layer0 = img.layers[0] assert layer0.placed_layer_size == (64, 64) assert layer0.transform_bbox == BBox(x1=96.0, y1=96.0, x2=160.0, y2=160.0) layer1 = img.layers[1] assert layer1.placed_layer_size == (101, 55) assert layer1.placed_layer_size.width == 101 assert layer1.transform_bbox == BBox(x1=27.0, y1=73.0, x2=229.0, y2=183.0) layer2 = img.layers[2] assert layer2.placed_layer_size == (64, 64) assert layer2.transform_bbox == BBox(x1=96.0, y1=96.0, x2=160.0, y2=160.0)
def test_bbox(filename, layer_index, bbox): psd = PSDImage(decode_psd(filename)) layer = psd.layers[layer_index] assert layer.bbox == bbox
def test_dimensions_api(filename, size): psd = PSDImage(decode_psd(filename)) assert psd.header.width == size[0] assert psd.header.height == size[1]
def test_blend_and_clipping(): psd = PSDImage(decode_psd('blend-and-clipping.psd')) for layer in psd.layers: assert isinstance(layer.as_PIL(), Image.Image)
def test_print(): psd = PSDImage(decode_psd('empty-layer.psd')) psd.print_tree()
def stroke_psd(): psd = PSDImage(decode_psd('stroke.psd')) yield psd
def test_no_text(): psd = PSDImage(decode_psd('1layer.psd')) assert not hasattr(psd.layers[0], 'text_data')
def test_userapi_no_placed_layers(): img = PSDImage(decode_psd("1layer.psd")) layer = img.layers[0] assert layer.placed_layer_size is None assert layer.transform_bbox is None
def test_fakeroot_layer_repr(): img = PSDImage(decode_psd('1layer.psd')) fakeroot = img.layers[0].parent assert re.match(r"<psd_tools.Group: u?'_RootGroup', layer_count=1>", repr(fakeroot)), repr(fakeroot)
def test_no_text(): psd = PSDImage(decode_psd('1layer.psd')) assert psd.layers[0].text_data is None
def test_text(filename, layer_num, text): psd = PSDImage(decode_psd(filename)) layer = psd.layers[layer_num] assert layer.text_data.text == text