Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
def stitch(im, pixelation=12):
    im = im.convert('RGB')

    # im = util.resize_jam_background(im)
    width, height = im.size

    # pixelate
    im = im.resize((int(math.ceil(width / float(pixelation))),
                    int(math.ceil(height / float(pixelation)))))
    pix = im.load()

    # random bg colour
    colours = util.get_dominant_colours(im, 2)
    colours = map(tuple, colours)
    # colours += [(0,0,0), (255,255,255)]
    bg_index = random.randint(0, len(colours) - 1)

    width, height = im.size
    new = Image.new('RGB', (width * pixelation, height * pixelation), colours[bg_index])
    draw = aggdraw.Draw(new)
    width, height = new.size

    # draw stitches
    for y in xrange(0, height, pixelation):
        for x in xrange(0, width, pixelation):
            pen = aggdraw.Pen(pix[x / pixelation, y / pixelation], 2)
            draw.line((x, y, x + pixelation - 3, y + pixelation - 3), pen)
            draw.line((x + pixelation - 3, y, x, y + pixelation - 3), pen)
    draw.flush()

    return new
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
def stitch(im, pixelation=12):
    im = im.convert('RGB')

    im = util.resize_jam_background(im)
    width, height = im.size

    # pixelate
    im = im.resize((int(math.ceil(width / float(pixelation))),
                    int(math.ceil(height / float(pixelation)))))
    pix = im.load()

    # random bg colour
    colours = util.get_dominant_colours(im, 2)
    colours = map(tuple, colours)
    colours += [(0, 0, 0), (255, 255, 255)]
    bg_index = random.randint(0, len(colours) - 1)

    width, height = im.size
    new = Image.new('RGB', (width * pixelation, height * pixelation),
                    colours[bg_index])
    draw = aggdraw.Draw(new)
    width, height = new.size

    # draw stitches
    for y in xrange(0, height, pixelation):
        for x in xrange(0, width, pixelation):
            pen = aggdraw.Pen(pix[x / pixelation, y / pixelation], 2)
            draw.line((x, y, x + pixelation - 3, y + pixelation - 3), pen)
            draw.line((x + pixelation - 3, y, x, y + pixelation - 3), pen)
    draw.flush()

    return new
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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
Exemplo n.º 13
0
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
Exemplo n.º 14
0
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
Exemplo n.º 15
0
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
Exemplo n.º 16
0
def leaves(image):
    image = image.convert('RGB')
    colours = util.get_dominant_colours(image, 8)
    light, dark = [colours[i] for i in random.sample(range(len(colours)), 2)]

    layer = Image.open(
        os.path.dirname(os.path.abspath(__file__)) + '/' + 'assets/leaves.png')

    layer = layer.convert('RGB')
    layer = ImageOps.grayscale(layer)
    layer = ImageOps.colorize(layer, dark, light)

    width, height = layer.size

    # shift half of the image horizontally
    left = layer.crop((0, 0, width / 2, height))
    right = layer.crop((width / 2, 0, width, height))
    new = Image.new('RGB', (width, height))
    new.paste(left, (width / 2, 0))
    new.paste(right, (0, 0))

    return new
Exemplo n.º 17
0
def leaves(image):
    image = image.convert('RGB')
    colours = util.get_dominant_colours(image, 8)
    light, dark = [colours[i] for i in random.sample(range(len(colours)), 2)]

    layer = Image.open(os.path.dirname(os.path.abspath(__file__)) + '/' +
                       'assets/leaves.png')

    layer = layer.convert('RGB')
    layer = ImageOps.grayscale(layer)
    layer = ImageOps.colorize(layer, dark, light)

    width, height = layer.size

    # shift half of the image horizontally
    left = layer.crop((0, 0, width / 2, height))
    right = layer.crop((width / 2, 0, width, height))
    new = Image.new('RGB', (width, height))
    new.paste(left, (width / 2, 0))
    new.paste(right, (0, 0))

    return new
Exemplo n.º 18
0
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