2021-07-14 19:33:27 +03:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
2021-07-14 19:26:04 +03:00
|
|
|
from huepaper import (
|
|
|
|
get_base_color,
|
|
|
|
create_colors,
|
|
|
|
create_base_image,
|
|
|
|
add_lines,
|
|
|
|
add_pixelation,
|
|
|
|
add_emblem,
|
|
|
|
save_image,
|
|
|
|
)
|
|
|
|
import argparse
|
|
|
|
|
|
|
|
|
|
|
|
def print_greeter():
|
|
|
|
greeter = """
|
|
|
|
.lk.
|
|
|
|
cO.
|
|
|
|
cO.;:lc. ,c. .cc .,',c; .,c.;coc. ;,.,c. ':l.:lo: '',:c. '::.lo.
|
|
|
|
cO' kd .O; dO ,x...,Ox cO; lO: ;x xk OO. .kO. x;...x0' 0x. .
|
|
|
|
cO. xx .O; dO ko...... :O. Ox .,..xO kk ;0;;0...... 0d
|
|
|
|
cO. xx .O; xO dO. .. :O. .O; dk xO kk :O.'0o , 0d
|
|
|
|
.dk, .kk. okc;,ox' ckxllc. :Oc'.,l' oOl;'dO:. kO;..:l. ,xOolc; ,Ox.
|
|
|
|
:O. kk
|
|
|
|
lO, OO
|
|
|
|
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO00O0000000000000000;
|
|
|
|
"""
|
|
|
|
print(greeter)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(
|
|
|
|
description="Create wallpapers based on color hues."
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-s",
|
|
|
|
"--size",
|
|
|
|
default="1920x1080",
|
|
|
|
help="size of huepaper in the form WIDTHxHEIGHT (default: 1920x1080)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-c",
|
|
|
|
"--color",
|
|
|
|
help="color, the huepaper is generated from (uses a random color if not given)",
|
|
|
|
)
|
|
|
|
parser.add_argument("-p", "--preview", action="store_true", help="preview huepaper")
|
|
|
|
parser.add_argument(
|
|
|
|
"-o", "--output", help="file where to save the huepaper to (default: None)"
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-l",
|
|
|
|
"--lines",
|
|
|
|
nargs="?",
|
|
|
|
const=0.3,
|
|
|
|
type=float,
|
|
|
|
help="include one to three random lines in base color with given opacity in range [0, 1] (default: 0.3)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-lb",
|
|
|
|
"--lines_bright",
|
|
|
|
nargs="?",
|
|
|
|
const=0.1,
|
|
|
|
type=float,
|
|
|
|
help="include one to three bright random lines with given opacity in range [0, 1] (default: 0.1)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-ld",
|
|
|
|
"--lines_dark",
|
|
|
|
nargs="?",
|
|
|
|
const=0.1,
|
|
|
|
type=float,
|
|
|
|
help="include one to three dark random lines with given opacity in range [0, 1] (default: 0.1)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-P",
|
|
|
|
"--pixelate",
|
|
|
|
nargs="?",
|
|
|
|
const="16x9",
|
|
|
|
help="pixelate image with WIDTHxHEIGHT (default: 16x9)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-e", "--emblem", help="emblem to add in the center of the huepaper"
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-hue",
|
|
|
|
default=0.1,
|
|
|
|
type=float,
|
|
|
|
help="maximum hue to differ from given color in range [0, 1] (default: 0.1)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-smin",
|
|
|
|
default=0.2,
|
|
|
|
type=float,
|
|
|
|
help="minimum satisfaction for colors in range [0, 1] (default: 0.2)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-smax",
|
|
|
|
default=1.0,
|
|
|
|
type=float,
|
|
|
|
help="maximum satisfaction for colors in range [0, 1] (default: 1.0)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-lmin",
|
|
|
|
default=0.2,
|
|
|
|
type=float,
|
|
|
|
help="minimum luminance for colors in range [0, 1] (default: 0.2)",
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
|
|
|
"-lmax",
|
|
|
|
default=0.9,
|
|
|
|
type=float,
|
|
|
|
help="maximum luminance for colors in range [0, 1] (default: 0.9)",
|
|
|
|
)
|
|
|
|
|
|
|
|
# Get args
|
|
|
|
args = parser.parse_args()
|
|
|
|
size = args.size
|
|
|
|
color = args.color
|
|
|
|
preview = args.preview
|
|
|
|
output = args.output
|
|
|
|
lines = args.lines
|
|
|
|
lines_bright = args.lines_bright
|
|
|
|
lines_dark = args.lines_dark
|
|
|
|
emblem = args.emblem
|
|
|
|
pixelate = args.pixelate
|
|
|
|
hue_max = args.hue
|
|
|
|
sat_min = args.smin
|
|
|
|
sat_max = args.smax
|
|
|
|
lum_min = args.lmin
|
|
|
|
lum_max = args.lmax
|
|
|
|
|
|
|
|
# Get size
|
|
|
|
try:
|
|
|
|
values = size.split("x")
|
|
|
|
width = int(values[0])
|
|
|
|
height = int(values[1])
|
|
|
|
except:
|
|
|
|
parser.error("The size must be given in form: 1920x1080")
|
|
|
|
|
|
|
|
# Check preconditions
|
|
|
|
if not preview and not output:
|
|
|
|
parser.error("You must either set -p (--preview) or -o (--output)")
|
|
|
|
if pixelate:
|
|
|
|
try:
|
|
|
|
values = pixelate.split("x")
|
|
|
|
px = int(values[0])
|
|
|
|
py = int(values[1])
|
|
|
|
except:
|
|
|
|
parser.error("Pixelation value must be set in form: 42x42")
|
|
|
|
|
|
|
|
print_greeter()
|
|
|
|
base_color = get_base_color(color, sat_min, sat_max, lum_min, lum_max)
|
|
|
|
c1, c2, c3, c4 = create_colors(
|
|
|
|
base_color, hue_max, sat_min, sat_max, lum_min, lum_max
|
|
|
|
)
|
|
|
|
image = create_base_image(c1, c2, c3, c4, width, height)
|
|
|
|
|
|
|
|
if lines:
|
|
|
|
image = add_lines(image, base_color.rgb + (lines,))
|
|
|
|
if lines_bright:
|
|
|
|
image = add_lines(image, (1.0, 1.0, 1.0, lines_bright))
|
|
|
|
if lines_dark:
|
|
|
|
image = add_lines(image, (0.0, 0.0, 0.0, lines_dark))
|
|
|
|
|
|
|
|
if pixelate:
|
|
|
|
image = add_pixelation(image, px, py)
|
|
|
|
|
|
|
|
if emblem:
|
|
|
|
image = add_emblem(image, emblem)
|
|
|
|
|
|
|
|
image.mode = "RGB"
|
|
|
|
|
|
|
|
if preview:
|
|
|
|
image.show()
|
|
|
|
if not output:
|
|
|
|
save = input("Do you want to save the image? [y/N] ")
|
|
|
|
if save == "y" or save == "Y":
|
|
|
|
path = input("Enter the path where the wallpaper shall be saved: ")
|
|
|
|
save_image(image, path)
|
|
|
|
|
|
|
|
if output:
|
|
|
|
save_image(image, output)
|