def test_composite_viewport(): psd = PSDImage.open(full_name('layers/smartobject-layer.psd')) bbox = (1, 1, 31, 31) shape = (bbox[3] - bbox[1], bbox[2] - bbox[0], 1) assert composite(psd)[1].shape == (psd.height, psd.width, 1) assert composite(psd, viewport=bbox)[1].shape == shape assert composite(psd[0])[1].shape == (psd[0].height, psd[0].width, 1) assert composite(psd[0], viewport=bbox)[1].shape == shape
def test_gradient_styles(filename): psd = PSDImage.open(full_name(filename)) for artboard in psd: for layer in artboard: desc = layer.tagged_blocks.get_data(Tag.GRADIENT_FILL_SETTING) form = desc.get(Key.Gradient).get(Type.GradientForm).enum reference = composite(layer)[0] result = composite(layer, force=True)[0] if form == Enum.CustomStops: assert _mse(reference, result) <= 0.08 elif form == Enum.ColorNoise: # Noise gradient is not of good quality. assert _mse(reference, result) <= 0.2
def test_composite_artboard(): psd = PSDImage.open(full_name('artboard.psd')) document_image = psd.numpy() assert document_image.shape[:2] == (psd.height, psd.width) artboard = psd[0] artboard_image = composite(artboard)[0] assert artboard_image.shape[:2] == (artboard.height, artboard.width)
def test_composite_minimal(filename): source = PSDImage.open(full_name('layers-minimal/' + filename)) reference = PSDImage.open(full_name('layers/' + filename)).numpy() color, _, alpha = composite(source, force=True) result = color if reference.shape[2] > color.shape[2]: result = np.concatenate((color, alpha), axis=2) assert _mse(reference, result) <= 0.017
def test_apply_mask(): from PIL import Image psd = PSDImage.open(full_name('masks/2.psd')) reference = np.asarray(Image.open(full_name('masks/2.png'))) / 255. result = np.concatenate(composite(psd)[::2], axis=2) assert reference.shape == result.shape # Hidden color seems different. assert _mse(reference[:, :, -1], result[:, :, -1]) <= 0.01
def composite_error(layer, threshold, force=True, channel=None): reference = layer.numpy(channel) color, _, alpha = composite(layer, force=force) result = color if reference.shape[2] > color.shape[2]: result = np.concatenate((color, alpha), axis=2) error = _mse(reference, result) assert error <= threshold return error
def test_composite_stroke(): psd = PSDImage.open(full_name('stroke.psd')) reference = composite(psd, force=True) result = composite(psd) assert _mse(reference[0], result[0]) > 0
def test_composite_layer_filter(): psd = PSDImage.open(full_name('clipping-mask.psd')) reference = composite(psd) result = composite(psd, layer_filter=lambda x: x.name != 'Shape 3') assert _mse(reference[0], result[0]) > 0
def test_apply_opacity(): psd = PSDImage.open(full_name('opacity-fill.psd')) result = composite(psd) assert _mse(psd.numpy('shape'), result[2]) < 0.01
def test_group_mask(): psd = PSDImage.open(full_name('masks3.psd')) reference = psd.numpy() result = composite(psd, force=True)[0] assert _mse(reference, result) <= 0.01