python判断、获取一张图片主色调的2个实例
python判断、获取一张图片主色调的2个实例
发布时间:2016-12-28 来源:查字典编辑
摘要:python判断图片主色调,单个颜色:复制代码代码如下:#!/usr/bin/envpython#-*-coding:utf-8-*-imp...

python判断图片主色调,单个颜色:

复制代码 代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import colorsys

from PIL import Image

import 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 = None

dominant_color = None

for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):

# Skip 100% transparent pixels

if a == 0:

continue

# Get color saturation, 0-1

saturation = 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/YUV

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

# Rescale luminance from 16-235 to 0-1

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

# Ignore the brightest colors

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

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 colorsys

from PIL import Image

import 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 = 1

dominant_color = []

for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):

# Skip 100% transparent pixels

if a == 0:

continue

# Get color saturation, 0-1

saturation = 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/YUV

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

# Rescale luminance from 16-235 to 0-1

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

# Ignore the brightest colors

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新python学习
热门python学习
脚本专栏子分类