mirror of
https://github.com/spiffcode/hostile-takeover.git
synced 2025-12-16 12:08:36 +00:00
87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
import sys
|
|
import Image
|
|
import colorsys
|
|
|
|
def shift_hue(i0, shift):
|
|
width = i0.size[0]
|
|
height = i0.size[1]
|
|
ir = Image.new('RGBA', (width, height))
|
|
|
|
for y in xrange(height):
|
|
for x in xrange(width):
|
|
p0 = i0.getpixel((x, y))
|
|
hsl = colorsys.rgb_to_hls(p0[0] / 255.0, p0[1] / 255.0, p0[2] / 255.0)
|
|
huenew = hsl[0] + (shift / 255.0)
|
|
if huenew > 1.0:
|
|
huenew = huenew - 1.0
|
|
rgb = colorsys.hls_to_rgb(huenew, hsl[1], hsl[2])
|
|
rgba = (int(rgb[0] * 255.0), int(rgb[1] * 255.0), int(rgb[2] * 255.0), p0[3])
|
|
ir.putpixel((x, y), rgba)
|
|
|
|
return ir
|
|
|
|
def image_add(i0, i1):
|
|
width = i0.size[0]
|
|
height = i0.size[1]
|
|
ir = Image.new('RGBA', (width, height))
|
|
|
|
for y in xrange(height):
|
|
for x in xrange(width):
|
|
p0 = i0.getpixel((x, y))
|
|
p1 = i1.getpixel((x, y))
|
|
r = p0[0] + p1[0]
|
|
if r > 255:
|
|
r = 255
|
|
g = p0[1] + p1[1]
|
|
if g > 255:
|
|
g = 255
|
|
b = p0[2] + p1[2]
|
|
if b > 255:
|
|
b = 255
|
|
a = p0[3]
|
|
ir.putpixel((x, y), (r, g, b, a))
|
|
|
|
return ir
|
|
|
|
if __name__ == "__main__":
|
|
i0 = Image.open(sys.argv[1]).convert('RGBA')
|
|
i1 = Image.open(sys.argv[2]).convert('RGBA')
|
|
|
|
width = i0.size[0]
|
|
height = i0.size[1]
|
|
print width, height
|
|
|
|
ir = Image.new('RGBA', (width, height))
|
|
|
|
for y in xrange(height):
|
|
for x in xrange(width):
|
|
p0 = i0.getpixel((x, y))
|
|
p1 = i1.getpixel((x, y))
|
|
|
|
r = p0[0] - p1[0]
|
|
if r < 0:
|
|
r = 0
|
|
g = p0[1] - p1[1]
|
|
if g < 0:
|
|
g = 0
|
|
b = p0[2] - p1[2]
|
|
if b < 0:
|
|
b = 0
|
|
a = p0[3]
|
|
ir.putpixel((x, y), (r, g, b, a))
|
|
|
|
bigwidth = width * 16
|
|
bigheight = height * 16
|
|
ibig = Image.new('RGBA', (bigwidth, bigheight))
|
|
|
|
hueshift = 0
|
|
for ys in xrange(0, bigheight, width):
|
|
for xs in xrange(0, bigwidth, width):
|
|
inew = shift_hue(ir, hueshift)
|
|
inew = image_add(i1, inew)
|
|
ibig.paste(inew, (xs, ys, xs + width, ys + height))
|
|
print hueshift
|
|
hueshift += 1
|
|
|
|
ibig.save('result.png')
|