python判断图片主色调,单个颜色:
代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-
import colorsysfrom pil import imageimport optparse
def get_dominant_color(image):”””find a pil image’s dominant color, returning an (r, g, b) tuple.”””
image = image.convert(‘rgba’)
# shrink the image, so we don’t spend too long analysing color# frequencies. we’re not interpolating so should be quick.image.thumbnail((200, 200))
max_score = nonedominant_color = none
for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):# skip 100% transparent pixelsif a == 0:continue
# get color saturation, 0-1saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]
# calculate luminance – integer yuv conversion from# http://en.wikipedia.org/wiki/yuvy = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)
# rescale luminance from 16-235 to 0-1y = (y – 16.0) / (235 – 16)
# ignore the brightest colorsif 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 = scoredominant_color = (r, g, b)
return dominant_color
def main():img = image.open(“meitu.jpg”)print ‘#%02x%02x%02x’ % get_dominant_color(img)
if __name__ == ‘__main__’:main()
python判断一张图片的主色调,多个颜色:
代码如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-
import colorsysfrom pil import imageimport optparse
def get_dominant_color(image):”””find a pil image’s dominant color, returning an (r, g, b) tuple.”””
image = image.convert(‘rgba’)
# shrink the image, so we don’t spend too long analysing color# frequencies. we’re not interpolating so should be quick.## image.thumbnail((200, 200))
max_score = 1dominant_color = []
for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):# skip 100% transparent pixelsif a == 0:continue
# get color saturation, 0-1saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]
# calculate luminance – integer yuv conversion from# http://en.wikipedia.org/wiki/yuvy = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)
# rescale luminance from 16-235 to 0-1y = (y – 16.0) / (235 – 16)
# ignore the brightest colorsif 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) * countif score > max_score:max_score = scoredominant_color.append((r, g, b))
return dominant_color
def main():img = image.open(“meitu.jpg”)colors = get_dominant_color(img)for item in colors:print ‘#%02x%02x%02x’ % item
if __name__ == ‘__main__’:main()