コード例 #1
0
ファイル: rise.py プロジェクト: akiomik/pilgram
def rise(im):
    """Applies Rise filter.

    Arguments:
        im: An input image.

    Returns:
        The output image.
    """

    cb = util.or_convert(im, 'RGB')

    cs1 = util.fill(cb.size, [236, 205, 169, .15])
    cm1 = css.blending.multiply(cb, cs1)

    cs2 = util.fill(cb.size, [50, 30, 7, .4])
    cm2 = css.blending.multiply(cb, cs2)

    gradient_mask1 = util.radial_gradient_mask(cb.size, length=.55)
    cm = Image.composite(cm1, cm2, gradient_mask1)

    cs3 = util.fill(cb.size, [232, 197, 152, .8])
    cm3 = css.blending.overlay(cm, cs3)

    gradient_mask2 = util.radial_gradient_mask(cb.size, scale=.9)
    cm_ = Image.composite(cm3, cm, gradient_mask2)
    cr = Image.blend(cm, cm_, .6)  # opacity

    cr = css.brightness(cr, 1.05)
    cr = css.sepia(cr, .2)
    cr = css.contrast(cr, .9)
    cr = css.saturate(cr, .9)

    return cr
コード例 #2
0
ファイル: mayfair.py プロジェクト: akiomik/pilgram
def mayfair(im):
    """Applies Mayfair filter.

    Arguments:
        im: An input image.

    Returns:
        The output image.
    """

    cb = util.or_convert(im, 'RGB')
    size = cb.size
    pos = (.4, .4)

    cs1 = util.fill(size, [255, 255, 255, .8])
    cm1 = css.blending.overlay(cb, cs1)

    cs2 = util.fill(size, [255, 200, 200, .6])
    cm2 = css.blending.overlay(cb, cs2)

    cs3 = util.fill(size, [17, 17, 17])
    cm3 = css.blending.overlay(cb, cs3)

    mask1 = util.radial_gradient_mask(size, scale=.3, center=pos)
    cs = Image.composite(cm1, cm2, mask1)

    mask2 = util.radial_gradient_mask(size, length=.3, scale=.6, center=pos)
    cs = Image.composite(cs, cm3, mask2)
    cr = Image.blend(cb, cs, .4)  # opacity

    cr = css.contrast(cr, 1.1)
    cr = css.saturate(cr, 1.1)

    return cr
コード例 #3
0
ファイル: test_util.py プロジェクト: zbxzc35/pilgram
def test_radial_gradient_mask_scale_le_0():
    w, h = (4, 4)
    mask = util.radial_gradient_mask((w, h), scale=0)

    assert list(mask.getdata()) == [0] * (w * h)
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #4
0
ファイル: test_util.py プロジェクト: zbxzc35/pilgram
def test_radial_gradient_mask_length_ge_1():
    w, h = (4, 4)
    mask = util.radial_gradient_mask((w, h), length=1)

    assert list(mask.getdata()) == [255] * (w * h)
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #5
0
ファイル: test_util.py プロジェクト: zbxzc35/pilgram
def test_radial_gradient_mask_length_eq_scale():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h), length=.5, scale=.5)

    expected_data = [
        0,
        0,
        0,
        0,
        0,
        0,
        255,
        255,
        255,
        0,
        0,
        255,
        255,
        255,
        0,
        0,
        255,
        255,
        255,
        0,
        0,
        0,
        0,
        0,
        0,
    ]

    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #6
0
ファイル: test_util.py プロジェクト: zbxzc35/pilgram
def test_radial_gradient_mask_scale():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h), scale=1.5)

    expected_data = [
        119,
        148,
        159,
        148,
        119,
        148,
        187,
        207,
        187,
        148,
        159,
        207,
        255,
        207,
        159,
        148,
        187,
        207,
        187,
        148,
        119,
        148,
        159,
        148,
        119,
    ]

    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #7
0
ファイル: test_util.py プロジェクト: zbxzc35/pilgram
def test_radial_gradient_mask_length():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h), length=.5)

    expected_data = [
        0,
        107,
        149,
        107,
        0,
        107,
        255,
        255,
        255,
        107,
        149,
        255,
        255,
        255,
        149,
        107,
        255,
        255,
        255,
        107,
        0,
        107,
        149,
        107,
        0,
    ]

    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #8
0
def brooklyn(im):
    """Applies Brooklyn filter.

    Arguments:
        im: An input image.

    Returns:
        The output image.
    """

    cb = util.or_convert(im, 'RGB')

    cs1 = util.fill(cb.size, [168, 223, 193, .4])
    cm1 = css.blending.overlay(cb, cs1)

    cs2 = util.fill(cb.size, [196, 183, 200])
    cm2 = css.blending.overlay(cb, cs2)

    gradient_mask = util.radial_gradient_mask(cb.size, length=.7)
    cr = Image.composite(cm1, cm2, gradient_mask)

    cr = css.contrast(cr, .9)
    cr = css.brightness(cr, 1.1)

    return cr
コード例 #9
0
def test_radial_gradient_mask_position():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h), center=(0, 0))

    expected_data = [
        255,
        210,
        165,
        120,
        75,
        210,
        191,
        154,
        112,
        69,
        165,
        154,
        128,
        92,
        53,
        120,
        112,
        92,
        64,
        30,
        75,
        69,
        53,
        30,
        0,
    ]

    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #10
0
ファイル: xpro2.py プロジェクト: i10/TangiFlow
def xpro2(im):
    """Applies X-pro II filter.

    Arguments:
        im: An input image.

    Returns:
        The output image.
    """

    cb = util.or_convert(im, 'RGB')

    cs1 = util.fill(cb.size, [230, 231, 224])
    cs2 = util.fill(cb.size, [43, 42, 161])
    cs2 = Image.blend(cb, cs2, .6)

    gradient_mask = util.radial_gradient_mask(cb.size, length=.4, scale=1.1)
    cs = Image.composite(cs1, cs2, gradient_mask)

    # TODO: improve alpha blending
    cm1 = css.blending.color_burn(cb, cs)
    cm2 = cm1.copy()
    cm2 = Image.blend(cb, cm2, .6)
    cr = Image.composite(cm1, cm2, gradient_mask)

    cr = css.sepia(cr, .3)

    return cr
コード例 #11
0
def test_radial_gradient_255_to_0():
    # this case is the same as radial_gradient_mask
    w, h = (5, 5)
    gradient = util.radial_gradient((w, h), [[255, 255, 255], [0, 0, 0]])

    expected = util.radial_gradient_mask((w, h))
    assert list(gradient.getdata(0)) == list(expected.getdata())
    assert list(gradient.getdata(1)) == list(expected.getdata())
    assert list(gradient.getdata(2)) == list(expected.getdata())
    assert gradient.size == (w, h)
    assert gradient.mode == 'RGB'
コード例 #12
0
def test_radial_gradient_mask_prepared_scale():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h), scale=1.5)

    expected_data = [
        118, 147, 158, 148, 119,
        147, 187, 207, 188, 148,
        158, 207, 239, 209, 160,
        148, 188, 209, 189, 149,
        119, 148, 160, 149, 120,
    ]

    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #13
0
def test_radial_gradient_mask_prepared():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h))

    expected_data = [
        52,  93,  111, 94,  53,
        93,  150, 182, 151, 94,
        111, 182, 231, 183, 113,
        94,  151, 183, 152, 95,
        53,  94,  113, 95,  54,
    ]

    # TODO: test rectangle
    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'
コード例 #14
0
ファイル: lofi.py プロジェクト: akiomik/pilgram
def lofi(im):
    """Applies Lo-Fi filter.

    Arguments:
        im: An input image.

    Returns:
        The output image.
    """

    cb = util.or_convert(im, 'RGB')

    cs = util.fill(cb.size, [34, 34, 34])
    cs = css.blending.multiply(cb, cs)

    mask = util.radial_gradient_mask(cb.size, length=.7, scale=1.5)
    cr = Image.composite(cb, cs, mask)

    cr = css.saturate(cr, 1.1)
    cr = css.contrast(cr, 1.5)

    return cr
コード例 #15
0
ファイル: test_util.py プロジェクト: zbxzc35/pilgram
def test_radial_gradient_mask():
    w, h = (5, 5)
    mask = util.radial_gradient_mask((w, h))

    expected_data = [
        49,
        92,
        110,
        93,
        50,
        92,
        151,
        182,
        152,
        94,
        110,
        182,
        255,
        183,
        111,
        93,
        152,
        183,
        153,
        94,
        50,
        94,
        111,
        94,
        51,
    ]

    # TODO: test position
    # TODO: test rectangle
    assert list(mask.getdata()) == expected_data
    assert mask.size == (w, h)
    assert mask.mode == 'L'