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
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
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'
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'
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'
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'
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'
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
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'
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
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'
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'
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'
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
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'