diff options
Diffstat (limited to 'images/gif.py')
-rwxr-xr-x | images/gif.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/images/gif.py b/images/gif.py new file mode 100755 index 0000000..26e8408 --- /dev/null +++ b/images/gif.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +import glob +import sys +import os +import math +import random +from PIL import Image + + +def color(hex_value): + h = hex_value.lstrip('#') + while len(h) < 8: + h += "f" + return tuple(int(h[i:i+2], 16) for i in (0, 2, 4, 6)) + +def rgb_to_v(c): + r, g, b = c[0]/255.0, c[1]/255.0, c[2]/255.0 + mx = max(r, g, b) + v = mx*100 + return v + +replace = color("#f58f44") +colors = [ + color("#191919"), + color("#373b41"), + ] + +def make(colors, inp=None): + p = len(colors) + w = int(128 / p) * p + h = int(128 / p) * p + + frames = [] + + for i in range(int(p*1*math.pi)): + if inp is None: + image = Image.new("RGBA", (w, h), colors[0]) + else: + image = Image.open(inp).convert("RGBA") + + for x in range(image.width): + for y in range(image.height): + f = 2 + r = random.randint(-f, f) + z = (i) - (y/(p/4)) + r + v = math.floor( (math.sin(z) + 1) * len(colors) * 0.5) + c = colors[v] + if inp is not None: + existing = image.getpixel((x, y)) + if existing[:3] == replace[:3]: + image.putpixel((x,y), c) + else: + image.putpixel((x,y), c) + + frames.append(image.convert("P")) + + + frames[0].save(sys.stdout, mode="P", format="GIF", append_images=frames[1:], save_all=True, duration=100, loop=0) + + +template = None +if len(sys.argv) > 1 and os.path.exists(sys.argv[1]): + template = sys.argv[1] + colors = colors + [ color("#f58f44") ] + +sorted(colors, key=rgb_to_v) +make(colors, inp=template) +#make("dist/images/remotecontrol.gif", colors2, inp="images/remotecontrol-small.png") + + |