今天对 EAF 音乐做了两个功能增强:
喜欢用 EAF 播放音乐的同学可以更新一下, 现在歌词体验非常丝滑了。
直方图算法讲解
from PIL import Image
def is_light_img_without_cv(img_path):
try:
img = Image.open(img_path)
width, height = img.size
left = width * 0.25
right = width * 0.75
top = height * 0.25
bottom = height * 0.75
pixels = []
for i in range(top, bottom):
for j in range(left, right):
pixel = img.getpixel((j, i))
pixels.append(pixel)
light_pixels = 0
for pixel in pixels:
r, g, b = pixel
if r > 220 or g > 220 or b > 220:
light_pixels += 1
light_pixel_ratio = light_pixels / len(pixels)
return light_pixel_ratio > 0.45
except:
return False
这个算法其实很简单, 就是把图片所有像素的 RGB 值取出来, 只要有一个维度颜色的值大于 220 (我们认为图片比较亮) 就给亮色像素的计数加 1, 最后用这些亮色像素的数量除以图片总像素的数量, 如果大于 45% 比例 (这是我实际测试的值), 我们就认为这个图片比较亮, 是浅色图片, 这时候歌词就应该用深色字体来形成对比, 以提高歌词在不同封面背景下的识别度。
考虑到 EAF 音乐的歌词只在封面中间显示, 上面的算法稍微微调了一下, 只取了封面中间区域的像素进行计算, 这样更加准确一点, 避免封面周围并没有和歌词交叉的区域影响中间区域的直方图计算结果。
Enjoy hacking. ;)