| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/python3
- # Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
- # All rights reserved.
- # Code licensed under the BSD License.
- # http://www.anki3d.org/LICENSE
- import argparse
- from PIL import Image, ImageDraw
- from math import *
- import os
- class Context:
- input = ""
- out_prefix = ""
- out_count = 0
- out_format = ""
- img = None
- color_delta = 0.0
- ctx = Context()
- def parse_commandline():
- """ Parse the command line arguments """
- parser = argparse.ArgumentParser(description = "This program takes a blue noise texture and creates an array of " \
- "noise textures",
- formatter_class = argparse.ArgumentDefaultsHelpFormatter)
- parser.add_argument("-i", "--input", required = True, help = "the input noise texture")
- parser.add_argument("-o", "--output-prefix", required = True, help = "prefix of the output images")
- parser.add_argument("-c", "--output-img-count", required = True, help = "number of output images")
- parser.add_argument("-f", "--output-format", help = "output format", default = "")
- args = parser.parse_args()
- ctx.input = args.input
- ctx.out_prefix = args.output_prefix
- ctx.out_count = int(args.output_img_count)
- ctx.out_format = args.output_format
- def init():
- # Open image
- ctx.img = Image.open(ctx.input)
- # Color fmt
- if ctx.img.mode != "RGB" and ctx.img.mode != "RGBA":
- raise Exception("Unknown mode %s" % ctx.img.mode)
- if ctx.out_format == "":
- ctx.out_format = ctx.img.mode
- # Color delta
- ctx.color_delta = int(0xFF / (ctx.out_count + 1.0))
- def create_image(idx):
- out_img = Image.new(ctx.img.mode, (ctx.img.width, ctx.img.height))
- delta = idx * ctx.color_delta
- for x in range(0, ctx.img.width):
- for y in range(0, ctx.img.height):
- pixel = ctx.img.getpixel((x, y))
- r = int(pixel[0] + delta) % 0xFF
- g = int(pixel[1] + delta) % 0xFF
- b = int(pixel[2] + delta) % 0xFF
- if ctx.img.mode == "RGBA":
- a = int(pixel[3] + delta) % 0xFF
- if ctx.out_format == "RGB":
- out_img.putpixel((x, y), (r, g, b))
- else:
- out_img.putpixel((x, y), (r, g, b, a))
- out_img.save("%s_%02d.png" % (ctx.out_prefix, idx))
- def main():
- """ The main """
- parse_commandline()
- init()
- for i in range(ctx.out_count):
- create_image(i + 1)
- if __name__ == "__main__":
- main()
|