Skip to content

Instantly share code, notes, and snippets.

@D3f0
Created September 22, 2011 21:46
Show Gist options
  • Save D3f0/1236143 to your computer and use it in GitHub Desktop.
Save D3f0/1236143 to your computer and use it in GitHub Desktop.
YIQ python script
#!/usr/bin/env python
# coding: utf-8
import operator
import itertools
from operator import getitem
from itertools import starmap
import colorsys
import PIL
from PIL import Image
# hacer algo con 'y'
# defino estas funciones por que la conversión que define python en colorsys
# anda raro....
def dotproduct(vec1, vec2, sum=sum, imap=itertools.imap, mul=operator.mul):
return sum(imap(mul, vec1, vec2))
def yiq2rgb(color):
dp = dotproduct
r = int(dp((1, 0.9563, 0.621), color))
g = int(dp((1, -0.2721, -0.6474), color))
b = int(dp((1, -1.1070, 1.7046), color))
return (r, g, b)
from os.path import splitext, extsep
def default_output_filename(fname):
''' A.jpg -> A-out.jpg '''
pathname, ext = splitext(fname)
return pathname + "-out" + ext
def process_image(fin, fout = None):
'''
@param fin: An image path
'''
im = Image.open(fin)
fout = fout or default_output_filename(fin)
data = list(im.getdata())
yiq = starmap(colorsys.rgb_to_yiq, data)
y = map(lambda point: getitem(point, 0), yiq)
i = map(lambda point: getitem(point, 1), yiq)
q = map(lambda point: getitem(point, 2), yiq)
rgb = map(yiq2rgb, zip(y, i, q))
im3 = Image.new('RGB', im.size)
im3.putdata(rgb)
im3.save(fout)
return fout
import sys
def main(argv = sys.argv):
from argparse import ArgumentParser
from datetime import datetime
parser = ArgumentParser("Yiq tool.")
parser.add_argument('input', nargs = '?')
parser.add_argument('output', nargs = '?', default = None)
args = parser.parse_args()
output_file = process_image(args.input, args.output)
print "%s created at %s" % (output_file, datetime.now().strftime("%X %x"))
if __name__ == '__main__':
sys.exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment