说明
这个工具可以分析照片中主要的颜色关系,分析和学习色彩搭配
需要安装的库
- Pillow
Pillow 是 Python 中用于图像处理的库,代码里使用它来打开、处理和保存图片,还利用其进行高斯模糊操作。 安装命令:
pip install pillow
- NumPy
NumPy 用于处理多维数组和矩阵运算,在代码中用来处理图片的像素数据,例如将图片转换为数组、随机采样像素以及计算平均颜色。 安装命令:
pip install numpy
- colorsys
colorsys 是 Python 标准库的一部分,无需额外安装,它提供了在不同颜色空间之间进行转换的功能,代码里用于将 RGB 颜色转换为 HSV 颜色进行排序。 - argparse
argparse 同样是 Python 标准库的一部分,无需额外安装,它用于解析命令行参数,方便用户指定输入图片路径、要提取的颜色数量、输出文件名以及高斯模糊的半径。
pip install --upgrade pillow numpy
源代码
from PIL import Image, ImageDraw
def extract_colors(image_path, n):
# 打开图片
image = Image.open(image_path)
# 缩小图片以模拟PS像素化滤镜
small_image = image.resize((n, n), resample=Image.NEAREST)
# 放大回原尺寸
result = small_image.resize(image.size, Image.NEAREST)
# 提取颜色
colors = []
for y in range(n):
for x in range(n):
color = result.getpixel((x * (image.width // n), y * (image.height // n)))
if color not in colors:
colors.append(color)
return colors[:n]
def create_color_blocks(colors, width, height):
block_width = width // len(colors)
color_blocks = Image.new('RGB', (width, height))
draw = ImageDraw.Draw(color_blocks)
for i, color in enumerate(colors):
x0 = i * block_width
x1 = (i + 1) * block_width
draw.rectangle([x0, 0, x1, height], fill=color)
return color_blocks
def add_color_blocks_to_image(image_path, n):
# 打开原图片
original_image = Image.open(image_path)
width, height = original_image.size
# 提取颜色
colors = extract_colors(image_path, n)
# 创建颜色块图片
color_blocks = create_color_blocks(colors, width, height // 10)
# 创建新图片,高度为原图片和颜色块图片的高度之和
new_image = Image.new('RGB', (width, height + color_blocks.height))
# 将原图片粘贴到新图片的顶部
new_image.paste(original_image, (0, 0))
# 将颜色块图片粘贴到新图片的底部
new_image.paste(color_blocks, (0, height))
return new_image
if __name__ == "__main__":
image_path = "landscape.jpg" # 替换为你的图片路径
n = int(input("请输入要提取的颜色数量: "))
result_image = add_color_blocks_to_image(image_path, n)
result_image.show()
result_image.save("result_image.jpg")