def tats(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 9) colours = util.order_colours_by_brightness(colours) bg = random.choice(colours[:3]) light = random.choice(colours[3:6]) dark = random.choice(colours[6:]) dist = math.sqrt( sum(map(lambda t: math.pow(t[0] - t[1], 2), zip(light, dark)))) if dist < 100: light = util.modify_hls(light, l=lambda l: l + 100) light = util.modify_hls(light, s=lambda s: s + 100) dark = util.modify_hls(dark, s=lambda s: s + 100) layer = Image.open( os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/tats.png') layer.load() r, g, b, a = layer.split() layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, tuple(dark), tuple(light)) layer.putalpha(a) im = Image.new('RGB', layer.size, tuple(bg)) im.paste(layer, mask=layer) return im
def space(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 12) colours = util.order_colours_by_brightness(colours) indices = sorted(random.sample(range(len(colours)), 3)) colours = [colours[i] for i in indices] light, bg, dark = map(tuple, colours) light = (200, 200, 100) dark = (100, 200, 100) bg = (0, 0, 50, 255) layer = Image.open( os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/space.jpg') layer = util.random_crop(layer, util.WIDTH, util.HEIGHT) colours = util.get_dominant_colours(image, 10) colours = util.order_colours_by_saturation(colours)[:-3] colours = random.sample(colours, 5) colours = util.order_colours_by_hue(colours) layer = layer.convert('RGB') gradient = util.create_gradient(layer.size, colours) im = Image.blend(layer, gradient, .4) return im
def tats(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 9) colours = util.order_colours_by_brightness(colours) bg = random.choice(colours[:3]) light = random.choice(colours[3:6]) dark = random.choice(colours[6:]) dist = math.sqrt(sum(map(lambda (a, b): math.pow(a - b, 2), zip(light, dark)))) if dist < 100: light = util.modify_hls(light, l=lambda l: l + 100) light = util.modify_hls(light, s=lambda s: s + 100) dark = util.modify_hls(dark, s=lambda s: s + 100) layer = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/tats.png') layer.load() r, g, b, a = layer.split() layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, tuple(dark), tuple(light)) layer.putalpha(a) im = Image.new('RGB', layer.size, tuple(bg)) im.paste(layer, mask=layer) return im
def space(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 12) colours = util.order_colours_by_brightness(colours) indices = sorted(random.sample(range(len(colours)), 3)) colours = [colours[i] for i in indices] light, bg, dark = map(tuple, colours) light = (200, 200, 100) dark = (100, 200, 100) bg = (0, 0, 50, 255) layer = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/space.jpg') layer = util.random_crop(layer, util.WIDTH, util.HEIGHT) colours = util.get_dominant_colours(image, 10) colours = util.order_colours_by_saturation(colours)[:-3] colours = random.sample(colours, 5) colours = util.order_colours_by_hue(colours) layer = layer.convert('RGB') gradient = util.create_gradient(layer.size, colours) im = Image.blend(layer, gradient, .4) return im
def triangles(original, n=30, size=150, width=700, height=700, min_distance=70, opacity=220): original = original.convert('RGB') colours = util.get_dominant_colours(original, 8) colours_ordered = util.order_colours_by_brightness(colours) brightest_colour = list(random.choice(colours_ordered[:3])) brightest_colour.append(0) new = Image.new('RGBA', (width, height), tuple(brightest_colour)) draw = aggdraw.Draw(new) centres = [] def is_too_close(x, y): for centre in centres: if math.sqrt(math.pow(centre[0] - x, 2) + math.pow(centre[1] - y, 2)) < min_distance: return True return False for i in xrange(n): colour = tuple(colours[int(random.randint(0, len(colours) - 1))]) x = random.randint(size / 2, width - 1 - size / 2) y = random.randint(size / 2, height - 1 - size / 2) if is_too_close(x, y): continue centres.append((x, y)) brush = aggdraw.Brush(colour, opacity) points = get_triangle_path(x, y, size / 2, size / 2) draw.polygon(points, None, brush) draw.flush() brightest_colour = brightest_colour[0:3] texture = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/airbrush.png') texture = texture.convert('RGBA') r, g, b, a = texture.split() texture = ImageOps.grayscale(texture) texture = ImageOps.colorize(texture, (0, 0, 0), tuple(brightest_colour)) texture = texture.convert('RGBA') texture.putalpha(a) r, g, b, a = new.split() texture = texture.crop((0, 0, width, height)) texture_layer = Image.new('RGBA', (width, height), (0, 0, 0, 0)) texture_layer.paste(texture, mask=new) new.paste(texture_layer, mask=texture_layer) im = Image.new('RGB', (width, height), tuple(brightest_colour)) im.paste(new, mask=a) return im
def halftone(original, radius=3, border=21, black_and_white=False): owidth, oheight = original.size original = util.resize_jam_background(original, owidth + border * 2, oheight + border * 2) original = original.convert('RGB') width, height = original.size if black_and_white: bg = (255, 255, 255) fg = (0, 0, 0) else: colours = util.get_dominant_colours(original, 10) colours = util.order_colours_by_brightness(colours) fg = tuple(random.choice(colours[-6:])) bg = tuple(random.choice(colours[:3])) if fg == bg: bg = (255, 255, 255) fg = (0, 0, 0) original = Contrast(original).enhance(1.5) pix = original.load() new = Image.new('RGB', (width, height), bg) draw = aggdraw.Draw(new) pen = aggdraw.Pen(fg) brush = aggdraw.Brush(fg) x_incr = 2 * radius y_incr = math.sqrt(3) * radius for y in xrange(0, height + 1, int(y_incr)): odd_offset = radius * (y / int(y_incr) % 2) for x in range(odd_offset, width + 1, x_incr): avg_gray = util.get_avg_gray(pix, x, y, radius) if avg_gray > .9: r = radius rnd = lambda: 1 else: r = radius * avg_gray rnd = lambda: 1 + random.randint(-1, 1) / 5.0 draw.ellipse((x - r * rnd(), y - r * rnd(), x + r * rnd(), y + r * rnd()), pen, brush) draw.flush() new = util.centre_crop(new, owidth, oheight) new = new.point(lambda p: p - 20) return new
def halftone(original, radius=3, border=21, black_and_white=False): original = util.resize_jam_background(original, util.WIDTH + border * 2, util.HEIGHT + border * 2) original = original.convert('RGB') width, height = original.size if black_and_white: bg = (255, 255, 255) fg = (0, 0, 0) else: colours = util.get_dominant_colours(original, 10) colours = util.order_colours_by_brightness(colours) fg = tuple(random.choice(colours[-6:])) bg = tuple(random.choice(colours[:3])) if fg == bg: bg = (255, 255, 255) fg = (0, 0, 0) original = Contrast(original).enhance(1.5) pix = original.load() new = Image.new('RGB', (width, height), bg) draw = aggdraw.Draw(new) pen = aggdraw.Pen(fg) brush = aggdraw.Brush(fg) x_incr = 2 * radius y_incr = math.sqrt(3) * radius for y in xrange(0, height + 1, int(y_incr)): odd_offset = radius * (y / int(y_incr) % 2) for x in range(odd_offset, width + 1, x_incr): avg_gray = util.get_avg_gray(pix, x, y, radius) if avg_gray > .9: r = radius rnd = lambda: 1 else: r = radius * avg_gray rnd = lambda: 1 + random.randint(-1, 1) / 5.0 draw.ellipse( (x - r * rnd(), y - r * rnd(), x + r * rnd(), y + r * rnd()), pen, brush) draw.flush() new = util.centre_crop(new, util.WIDTH, util.HEIGHT) new = new.point(lambda p: p - 20) return new
def ombre(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 12) colours = util.order_colours_by_brightness(colours) light = random.choice(colours[:3]) dark = random.choice(colours[-3:]) layer = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/ombre.jpg') layer = util.random_crop(layer, util.WIDTH, util.HEIGHT) layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, dark, light) return layer
def ombre(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 12) colours = util.order_colours_by_brightness(colours) light = random.choice(colours[:3]) dark = random.choice(colours[-3:]) layer = Image.open( os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/ombre.jpg') layer = util.random_crop(layer, util.WIDTH, util.HEIGHT) layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, dark, light) return layer
def plaid(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 12) colours = util.order_colours_by_brightness(colours) indices = sorted(random.sample(range(len(colours)), 3)) colours = [colours[i] for i in indices] light, bg, dark = map(tuple, colours) layer = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/plaid.png') layer.load() r, g, b, a = layer.split() layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, dark, light) layer.putalpha(a) im = Image.new('RGB', layer.size, bg) im.paste(layer, mask=layer) return im
def bokeh(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 8) colours = util.order_colours_by_brightness(colours)[2:7] colour = random.choice(colours) colour = util.modify_hsv(colour, s=lambda s: 255, v=lambda v: 255) light = (255, 244, 180) layer = Image.open( os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/bokeh.png') layer = util.random_crop(layer, util.WIDTH, util.HEIGHT) r, g, b, a = layer.split() layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, colour, light) layer.putalpha(a) im = Image.new('RGB', layer.size) im.paste(layer, (0, 0), layer) return im
def bokeh(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 8) colours = util.order_colours_by_brightness(colours)[2:7] colour = random.choice(colours) colour = util.modify_hsv(colour, s=lambda s: 255, v=lambda v: 255) light = (255, 244, 180) layer = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/bokeh.png') layer = util.random_crop(layer, util.WIDTH, util.HEIGHT) r, g, b, a = layer.split() layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, colour, light) layer.putalpha(a) im = Image.new('RGB', layer.size) im.paste(layer, (0, 0), layer) return im
def plaid(image): image = image.convert('RGB') colours = util.get_dominant_colours(image, 12) colours = util.order_colours_by_brightness(colours) indices = sorted(random.sample(range(len(colours)), 3)) colours = [colours[i] for i in indices] light, bg, dark = map(tuple, colours) layer = Image.open( os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/plaid.png') layer.load() r, g, b, a = layer.split() layer = layer.convert('RGB') layer = ImageOps.grayscale(layer) layer = ImageOps.colorize(layer, dark, light) layer.putalpha(a) im = Image.new('RGB', layer.size, bg) im.paste(layer, mask=layer) return im
def triangles(original, n=30, size=150, width=700, height=700, min_distance=70, opacity=220): original = original.convert('RGB') colours = util.get_dominant_colours(original, 8) colours_ordered = util.order_colours_by_brightness(colours) brightest_colour = list(random.choice(colours_ordered[:3])) brightest_colour.append(0) new = Image.new('RGBA', (width, height), tuple(brightest_colour)) draw = aggdraw.Draw(new) centres = [] def is_too_close(x, y): for centre in centres: if math.sqrt( math.pow(centre[0] - x, 2) + math.pow(centre[1] - y, 2)) < min_distance: return True return False for i in range(n): colour = tuple(colours[int(random.randint(0, len(colours) - 1))]) x = random.randint(size / 2, width - 1 - size / 2) y = random.randint(size / 2, height - 1 - size / 2) if is_too_close(x, y): continue centres.append((x, y)) brush = aggdraw.Brush(colour, opacity) points = get_triangle_path(x, y, size / 2, size / 2) draw.polygon(points, None, brush) draw.flush() brightest_colour = brightest_colour[0:3] texture = Image.open( os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/airbrush.png') texture = texture.convert('RGBA') r, g, b, a = texture.split() texture = ImageOps.grayscale(texture) texture = ImageOps.colorize(texture, (0, 0, 0), tuple(brightest_colour)) texture = texture.convert('RGBA') texture.putalpha(a) r, g, b, a = new.split() texture = texture.crop((0, 0, width, height)) texture_layer = Image.new('RGBA', (width, height), (0, 0, 0, 0)) texture_layer.paste(texture, mask=new) new.paste(texture_layer, mask=texture_layer) im = Image.new('RGB', (width, height), tuple(brightest_colour)) im.paste(new, mask=a) return im