Beispiel #1
0
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
Beispiel #2
0
def test_pilio(fixture):
    image = fixture.topil()
    for i in range(fixture.channels):
        fixture.topil(channel=i)
    psd = PSDImage.frompil(image, compression=Compression.RAW)
    assert psd._record.header == fixture._record.header
    assert psd._record.image_data == fixture._record.image_data
Beispiel #3
0
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)
Beispiel #4
0
def test_composite_layer_filter():
    psd = PSDImage.open(full_name('colormodes/4x4_8bit_rgba.psd'))
    # Check layer_filter.
    rendered = psd.composite(layer_filter=lambda x: False)
    reference = psd.topil()
    assert all(a != b
               for a, b in zip(rendered.getextrema(), reference.getextrema()))
Beispiel #5
0
def test_compose_bbox():
    psd = PSDImage.open(full_name('layers/smartobject-layer.psd'))
    bbox = (1, 1, 31, 31)
    size = (bbox[2] - bbox[0], bbox[3] - bbox[1])
    assert psd.compose().size == psd.size
    assert psd.compose(bbox=bbox).size == size
    assert psd[0].compose().size == psd[0].size
    assert psd[0].compose(bbox=bbox).size == size
Beispiel #6
0
def test_compose_artboard():
    psd = PSDImage.open(full_name('artboard.psd'))
    document_image = psd.compose()
    assert document_image.size == psd.size
    artboard = psd[0]
    artboard_image = artboard.compose()
    assert artboard_image.size == artboard.size
    assert artboard.size != Group.extract_bbox(artboard)
Beispiel #7
0
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
Beispiel #8
0
def test_composite_pil(colormode, depth, mode, ignore_preview):
    from PIL import Image
    filename = 'colormodes/4x4_%gbit_%s.psd' % (depth, colormode)
    psd = PSDImage.open(full_name(filename))
    image = psd.composite(ignore_preview=ignore_preview)
    assert isinstance(image, Image.Image)
    assert image.mode == mode
    for layer in psd:
        assert isinstance(layer.composite(), Image.Image)
Beispiel #9
0
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
Beispiel #10
0
def test_apply_mask():
    psd = PSDImage.open(full_name('masks/2.psd'))
    image = Image.open(full_name('masks/2.png'))
    rendered = psd.compose()
    assert image.size == rendered.size
    assert _calculate_hash_error(image, rendered) <= 0.1

    for i, layer in enumerate(psd):
        image = Image.open(full_name('masks/2-ellipse{}.png'.format(i + 1)))
        image = image
        rendered = layer.compose()
        assert image.size == rendered.size
        assert _calculate_hash_error(image, rendered) <= 0.1
Beispiel #11
0
def adjustment_layer():
    return PSDImage.open(full_name('layers/brightness-contrast.psd'))[0]
Beispiel #12
0
def test_clip_adjustment():
    psd = PSDImage.open(full_name('clip-adjustment.psd'))
    assert len(psd) == 1
    layer = psd[0]
    assert layer.kind == 'type'
    assert len(layer.clip_layers) == 1
Beispiel #13
0
def test_group_extract_bbox():
    psd = PSDImage.open(full_name('hidden-groups.psd'))
    assert Group.extract_bbox(psd[1:], False) == (40, 72, 83, 134)
    assert Group.extract_bbox(psd[1:], True) == (25, 34, 83, 134)
Beispiel #14
0
def layer_mask_data():
    return PSDImage.open(full_name('layer_mask_data.psd'))
Beispiel #15
0
def pixel_layer():
    return PSDImage.open(full_name('layers/pixel-layer.psd'))[0]
Beispiel #16
0
def test_composite_colormodes(colormode, depth):
    filename = 'colormodes/4x4_%gbit_%s.psd' % (depth, colormode)
    psd = PSDImage.open(full_name(filename))
    composite_error(psd, 0.01, False, 'color')
Beispiel #17
0
def test_apply_icc_profile():
    filepath = full_name('colorprofiles/north_america_newspaper.psd')
    psd = PSDImage.open(filepath)
    no_icc = psd.compose(apply_icc=False)
    with_icc = psd.compose(apply_icc=True)
    assert no_icc.getextrema() != with_icc.getextrema()
Beispiel #18
0
def test_compose_minimal(filename):
    source = PSDImage.open(full_name('layers-minimal/' + filename)).compose()
    reference = PSDImage.open(full_name('layers/' + filename)).compose(True)
    assert _calculate_hash_error(source, reference) <= 0.172
Beispiel #19
0
def test_compose_colormodes(colormode, depth):
    filename = 'colormodes/4x4_%gbit_%s.psd' % (depth, colormode)
    psd = PSDImage.open(full_name(filename))
    assert isinstance(psd.compose(), Image.Image)
Beispiel #20
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
Beispiel #21
0
def test_compose_quality(filename, threshold=0.1):
    psd = PSDImage.open(full_name(filename))
    preview = psd.topil()
    rendered = psd.compose(force=True)
    assert _calculate_hash_error(preview, rendered) <= threshold
Beispiel #22
0
def type_layer():
    return PSDImage.open(full_name('layers/type-layer.psd'))[0]
Beispiel #23
0
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
Beispiel #24
0
from __future__ import absolute_import, unicode_literals
import pytest
import logging

from psd_tools.api.psd_image import PSDImage
from psd_tools.terminology import Enum

from ..utils import full_name

logger = logging.getLogger(__name__)

LAYER_EFFECTS = PSDImage.open(full_name('layer_effects.psd'))


@pytest.fixture
def fixture():
    yield LAYER_EFFECTS


def test_effects(fixture):
    assert isinstance(fixture[0].effects.scale, float)
    assert fixture[0].effects.enabled is True
    for layer in fixture:
        assert layer.__repr__()
    for effect in fixture[0].effects:
        assert effect.enabled is True


def test_bevel(fixture):
    effect = fixture[1].effects[0]
    assert not hasattr(effect, 'blend_mode')
Beispiel #25
0
def fill_layer():
    return PSDImage.open(full_name('layers/solid-color-fill.psd'))[0]
Beispiel #26
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
Beispiel #27
0
def smartobject_layer():
    return PSDImage.open(full_name('layers/smartobject-layer.psd'))[0]
Beispiel #28
0
def check_composite_quality(filename, threshold=0.1, force=False):
    psd = PSDImage.open(full_name(filename))
    composite_error(psd, threshold, force)
Beispiel #29
0
def group():
    return PSDImage.open(full_name('layers/group.psd'))[0]
Beispiel #30
0
def test_apply_opacity():
    psd = PSDImage.open(full_name('opacity-fill.psd'))
    image = psd.compose(force=True)
    assert image.getpixel((0, 0))[-1] == psd.compose().getpixel((0, 0))[-1]