python判断、获取一张图片主色调的2个实例

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()

Posted in 未分类