From 3a7b6ab7ffb6006faadc0e9c6126bad7042cb44f Mon Sep 17 00:00:00 2001 From: shirshasa Date: Fri, 2 Jul 2021 15:38:20 +0300 Subject: [PATCH] epub converter: add rgba to rgb conversion --- src/util/color_reader.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/util/color_reader.py b/src/util/color_reader.py index d7a3d61..a5c33ff 100644 --- a/src/util/color_reader.py +++ b/src/util/color_reader.py @@ -78,6 +78,14 @@ def str2closest_html_color_name(s: str): return '' +def rgba2rgb(r, g, b, alpha): + r_background, g_background, b_background = 255, 255, 255 + r_new = int((1 - alpha) * r_background + alpha * r) + g_new = int((1 - alpha) * g_background + alpha * g) + b_new = int((1 - alpha) * b_background + alpha * b) + return r_new, g_new, b_new + + def str2hex(s: str): if '#' in s: return s.lower() @@ -89,20 +97,26 @@ def str2hex(s: str): return rgb_percent_to_hex((r, g, b)) if 'rgb' in s: - match = re.search(r'rgba*\(((\d+), *(\d+), *(\d+)(, \d\.\d+)*)\)', s) + match = re.search(r'rgba*\(((\d+), *(\d+), *(\d+), (\d\.\d+)*)\)', s) if match: r, g, b = int(match.group(2)), int(match.group(3)), int(match.group(4)) + if match.group(5): + alpha = float(match.group(5)) + r, g, b = rgba2rgb(r, g, b, alpha) return rgb_to_hex((r, g, b)) if 'hsl' in s: # hsl(hue in {0,360}, saturation [0, 100%], lightness [0, 100%]) - match = re.search(r'hsla*\(((\d+), *(\d+)%, *(\d+)%(, \d\.\d+)*)\)', s) + match = re.search(r'hsla*\(((\d+), *(\d+)%, *(\d+)%, (\d\.\d+)*)\)', s) if match: h, s, l = int(match.group(2)), int(match.group(3)), int(match.group(4)) h /= 360 s /= 10 l /= 100 rgb = tuple(hls_to_rgb(h, s, l)) + if match.group(5): + alpha = match.group(5) + rgb = rgba2rgb(*rgb, alpha) return rgb_to_hex(rgb) if s.lower() in css3_names_to_hex: