# 得到一张图片或logo的主要颜色（颜色趋向）python版

2012-12-22 10:16:18

import
colorsys

def get_dominant_color(image):

#颜色模式转换，以便输出rgb颜色值
image = image.convert('RGBA')

#生成缩略图，减少计算量，减小cpu压力
image.thumbnail((200, 200))

max_score = None
dominant_color = None

for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
# 跳过纯黑色
if a == 0:
continue

saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]

y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)

y = (y - 16.0) / (235 - 16)

# 忽略高亮色
if y > 0.9:
continue

# Calculate the score, preferring highly saturated colors.
# Add 0.1 to the saturation so we don't completely ignore grayscale
# colors by multiplying the count by zero, but still give them a low
# weight.
score = (saturation + 0.1) * count

if score > max_score:
max_score = score
dominant_color = (r, g, b)

return dominant_color

from PIL import Image

print  get_dominant_color(Image.open('logo.jpg'))

1. Python论坛

2. python技术互助群(请不要加多个群):

3. 关注PythonTab微信: Pythontab ，公众号：Pythontab中文网