一个用于帮助学习调色的小工具

说明

这个工具可以分析照片中主要的颜色关系,分析和学习色彩搭配

需要安装的库

  1. Pillow
    Pillow 是 Python 中用于图像处理的库,代码里使用它来打开、处理和保存图片,还利用其进行高斯模糊操作。 安装命令:
pip install pillow
  1. NumPy
    NumPy 用于处理多维数组和矩阵运算,在代码中用来处理图片的像素数据,例如将图片转换为数组、随机采样像素以及计算平均颜色。 安装命令:
pip install numpy
  1. colorsys
    colorsys 是 Python 标准库的一部分,无需额外安装,它提供了在不同颜色空间之间进行转换的功能,代码里用于将 RGB 颜色转换为 HSV 颜色进行排序。
  2. 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")

文章源自:http://leoneivy.voin.ink/index.php/archives/18/#cl-2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leone_YJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值