#!/usr/bin/env python3
# ---------------------------------------------------------------------------- #
## \file img2contrast.py
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
import sys
from PIL import Image
if len(sys.argv) <= 2:
print('Usage: {} <png> <contrast.png> [threshold1 color1... 0 0]'.format(
sys.argv[0]),
file=sys.stderr)
exit(1)
srcName = sys.argv[1]
dstName = sys.argv[2]
# Grayscale
src = Image.open(srcName).convert('L')
dst = Image.new("L", src.size)
srcPx = src.load()
dstPx = dst.load()
# Contrast
m = 255
n = 0
for j in range(0, dst.height):
for i in range(0, dst.width):
m = min(m, srcPx[i, j])
n = max(n, srcPx[i, j])
for j in range(0, dst.height):
for i in range(0, dst.width):
p = srcPx[i, j]
dstPx[i, j] = int((p - m) * 255 / (n - m))
# Posterize
if len(sys.argv) > 3:
threshold = [int(i) for i in sys.argv[3::2]]
color = [int(i) for i in sys.argv[4::2]]
for j in range(0, dst.height):
for i in range(0, dst.width):
p = dstPx[i, j]
for c, t in enumerate(threshold):
if p >= t:
dstPx[i, j] = color[c]
break
else:
for j in range(0, dst.height):
for i in range(0, dst.width):
p = dstPx[i, j]
# 16 colors + white
if p < 255:
dstPx[i, j] = p & 0xF0
dst.save(dstName)
dst.show()