X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/7805246da7d634d97dfa9e864c2502bd56a3a919..8495b2ce8e9aebe778db74217b60fb68c0b5f9f2:/src/librarian/covers/utils/color.py diff --git a/src/librarian/covers/utils/color.py b/src/librarian/covers/utils/color.py new file mode 100644 index 0000000..afcf38e --- /dev/null +++ b/src/librarian/covers/utils/color.py @@ -0,0 +1,39 @@ +def luminance(rgb): + rgb = [ + c / 255 + for c in rgb + ] + rgb = [ + c / 12.92 if c < .03928 else ((c + .055) / 1.055) ** 2.4 + for c in rgb + ] + return .2126 * rgb[0] + .7152 * rgb[1] + .0722 * rgb[2] + + +def cdist(a, b): + d = abs(a-b) + if d > 128: + d = 256 - d + return d + + +def algo_contrast_or_hue(img, colors): + rgb = img.convert('RGB').resize((1, 1)).getpixel((0, 0)) + lumi = luminance(rgb) + + if lumi > .9: + return colors[3] + elif lumi < .1: + return colors[2] + + hue = img.convert('HSV').resize((1, 1)).getpixel((0, 0))[0] + return max( + colors[:3], + key=lambda c: cdist(hue, c['hsv'][0]) ** 2 + (lumi - c['luminance']) ** 2 + ) + + +def is_very_bright(img): + rgb = img.convert('RGB').getpixel((0, 0)) + lumi = luminance(rgb) + return lumi > .95