Wave goodbye to material-color-utilities-python (#361)

This commit is contained in:
end-4
2024-03-28 13:07:19 +07:00
committed by GitHub
3 changed files with 48 additions and 47 deletions
@@ -46,7 +46,7 @@ elif [ "$backend" = "material" ]; then
smartflag='--smart True' smartflag='--smart True'
fi fi
color_generation/generate_colors_material.py --path "$1" \ color_generation/generate_colors_material.py --path "$1" \
--mode "$lightdark" --scheme "$materialscheme" --transparency "$transparency" --cache '.cache/ags/user/color.txt' $smartflag \ --mode "$lightdark" --scheme "$materialscheme" --transparency "$transparency" --cache "$HOME/.cache/ags/user/color.txt" $smartflag \
> "$HOME"/.cache/ags/user/generated/material_colors.scss > "$HOME"/.cache/ags/user/generated/material_colors.scss
if [ "$2" = "--apply" ]; then if [ "$2" = "--apply" ]; then
cp "$HOME"/.cache/ags/user/generated/material_colors.scss "$HOME/.config/ags/scss/_material.scss" cp "$HOME"/.cache/ags/user/generated/material_colors.scss "$HOME/.config/ags/scss/_material.scss"
@@ -1,61 +1,56 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from material_color_utilities_python import *
from pathlib import Path
import sys
import subprocess
import argparse import argparse
import os import math
from PIL import Image
from materialyoucolor.quantize import QuantizeCelebi
from materialyoucolor.score.score import Score
from materialyoucolor.hct import Hct from materialyoucolor.hct import Hct
from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors from materialyoucolor.dynamiccolor.material_dynamic_colors import MaterialDynamicColors
from materialyoucolor.utils.color_utils import rgba_from_argb, argb_from_rgb
argb_to_hex = lambda argb: "#{:02X}{:02X}{:02X}".format(*map(round, rgba_from_argb(argb)))
hex_to_argb = lambda hex_code: argb_from_rgb(int(hex_code[1:3], 16), int(hex_code[3:5], 16), int(hex_code[5:], 16))
parser = argparse.ArgumentParser(description='Color generation script') parser = argparse.ArgumentParser(description='Color generation script')
parser.add_argument('--path', type=str, default=None, help='generate colorscheme from image') parser.add_argument('--path', type=str, default=None, help='generate colorscheme from image')
parser.add_argument('--size', type=int , default=128 , help='bitmap image size')
parser.add_argument('--color', type=str, default=None, help='generate colorscheme from color') parser.add_argument('--color', type=str, default=None, help='generate colorscheme from color')
parser.add_argument('--mode', type=str, choices=['dark', 'light'], default='dark', help='dark or light mode') parser.add_argument('--mode', type=str, choices=['dark', 'light'], default='dark', help='dark or light mode')
parser.add_argument('--scheme', type=str, default=None, help='material scheme to use') parser.add_argument('--scheme', type=str, default=None, help='material scheme to use')
parser.add_argument('--smart', type=str, default=False, help='decide scheme type based on image color') parser.add_argument('--smart', type=str, default=False, help='decide scheme type based on image color')
parser.add_argument('--transparency', type=str, choices=['opaque', 'transparent'], default='opaque', help='enable transparency') parser.add_argument('--transparency', type=str, choices=['opaque', 'transparent'], default='opaque', help='enable transparency')
parser.add_argument('--cache', type=str, default=None, help='file path (relative to home) to store the generated color') parser.add_argument('--cache', type=str, default=None, help='file path to store the generated color')
parser.add_argument('--debug', action='store_true', default=False, help='debug mode') parser.add_argument('--debug', action='store_true', default=False, help='debug mode')
args = parser.parse_args() args = parser.parse_args()
def hex_to_argb(hex_color):
color = hex_color.lstrip('#')
if len(color) != 6:
raise ValueError("Invalid color code!")
r = int(color[:2], 16)
g = int(color[2:4], 16)
b = int(color[4:], 16)
a = 255
argb = (a << 24) | (r << 16) | (g << 8) | b
return argb
def argb_to_hex(argb_value):
r = (argb_value >> 16) & 0xff
g = (argb_value >> 8) & 0xff
b = argb_value & 0xff
hex_r = format(r, '02x')
hex_g = format(g, '02x')
hex_b = format(b, '02x')
hex_color = f"#{hex_r}{hex_g}{hex_b}"
return hex_color
darkmode = (args.mode == 'dark') darkmode = (args.mode == 'dark')
transparent = (args.transparency == 'transparent') transparent = (args.transparency == 'transparent')
print(f"$darkmode: {darkmode};") print(f"$darkmode: {darkmode};")
print(f"$transparent: {transparent};") print(f"$transparent: {transparent};")
def calculate_optimal_size (width, height, bitmap_size):
image_area = width * height;
bitmap_area = bitmap_size ** 2
scale = math.sqrt(bitmap_area/image_area) if image_area > bitmap_area else 1
new_width = round(width * scale)
new_height = round(height * scale)
if new_width == 0:
new_width = 1
if new_height == 0:
new_height = 1
return new_width, new_height
if args.path is not None: if args.path is not None:
img = Image.open(args.path) image = Image.open(args.path)
basewidth = 64 wsize, hsize = image.size
wpercent = (basewidth/float(img.size[0])) wsize_new, hsize_new = calculate_optimal_size(wsize, hsize, args.size)
hsize = int((float(img.size[1])*float(wpercent))) if wsize_new < wsize or hsize_new < hsize:
img = img.resize((basewidth,hsize),Image.Resampling.BICUBIC) image = image.resize((wsize_new, hsize_new), Image.Resampling.BICUBIC)
argb = sourceColorFromImage(img) colors = QuantizeCelebi(image.getdata(), 128)
argb = Score.score(colors)[0]
if args.cache is not None: if args.cache is not None:
export_color_file=os.environ['HOME'] + "/" + args.cache with open(args.cache, 'w') as file:
with open(export_color_file, 'w') as file:
file.write(argb_to_hex(argb)) file.write(argb_to_hex(argb))
hct = Hct.from_int(argb) hct = Hct.from_int(argb)
if(args.smart): if(args.smart):
@@ -95,21 +90,27 @@ for color in vars(MaterialDynamicColors).keys():
if hasattr(color_name, "get_hct"): if hasattr(color_name, "get_hct"):
rgba = color_name.get_hct(scheme).to_rgba() rgba = color_name.get_hct(scheme).to_rgba()
r, g, b, a = rgba r, g, b, a = rgba
hex_color = f"#{r:02X}{g:02X}{b:02X}" hex_code = f"#{r:02X}{g:02X}{b:02X}"
print('$' + color + ': ' + hex_color + ';') print('$' + color + ': ' + hex_code + ';')
if args.debug == True: if args.debug == True:
print('---------------------') print('---------------------')
print('Hue', hct.hue) if args.path is not None:
print('Chroma', hct.chroma) print('Image size: {} x {}'.format(wsize, hsize))
print('Tone', hct.tone) print('Resized image: {} x {}'.format(wsize_new, hsize_new))
print('Dark mode?', darkmode) print('Hue:', hct.hue)
print('Scheme', args.scheme) print('Chroma:', hct.chroma)
print('Tone:', hct.tone)
r, g, b, a = rgba_from_argb(argb)
hex_code = argb_to_hex(argb)
print('Selected Color:', "\x1B[38;2;{};{};{}m{}\x1B[0m".format(r, g, b, "\x1b[7m \x1b[7m"), hex_code)
print('Dark mode:', darkmode)
print('Scheme:', args.scheme)
print('---------------------') print('---------------------')
for color in vars(MaterialDynamicColors).keys(): for color in vars(MaterialDynamicColors).keys():
color_name = getattr(MaterialDynamicColors, color) color_name = getattr(MaterialDynamicColors, color)
if hasattr(color_name, "get_hct"): if hasattr(color_name, "get_hct"):
rgba = color_name.get_hct(scheme).to_rgba() rgba = color_name.get_hct(scheme).to_rgba()
r, g, b, a = rgba r, g, b, a = rgba
hex_color = f"#{r:02X}{g:02X}{b:02X}" hex_code = f"#{r:02X}{g:02X}{b:02X}"
print(color.ljust(32), "\x1B[38;2;{};{};{}m{}\x1B[0m".format(rgba[0], rgba[1], rgba[2], "\x1b[7m \x1b[7m"), hex_color) print(color.ljust(32), "\x1B[38;2;{};{};{}m{}\x1B[0m".format(rgba[0], rgba[1], rgba[2], "\x1b[7m \x1b[7m"), hex_code)
+1 -1
View File
@@ -9,7 +9,7 @@ tinyxml2 gtkmm3 gtksourceviewmm cairomm
### Python ### Python
# Add `python-setuptools-scm` and `python-wheel` explicitly to fix #197 # Add `python-setuptools-scm` and `python-wheel` explicitly to fix #197
python-build python-material-color-utilities python-materialyoucolor-git python-pillow python-poetry python-pywal python-setuptools-scm python-wheel python-build python-materialyoucolor-git python-pillow python-pywal python-setuptools-scm python-wheel
### Basic graphic env ### Basic graphic env
hyprland-git xorg-xrandr hyprland-git xorg-xrandr