Created
September 22, 2011 21:46
-
-
Save D3f0/1236143 to your computer and use it in GitHub Desktop.
YIQ python script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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