You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python生成带有RGB代码标注的唯一颜色方块图像

帮你完善带RGB标注的唯一颜色方块生成代码

嘿,我来帮你搞定这个需求!你的基础代码已经有模有样了,接下来我们可以一步步调整,让你的颜色方块能准确显示对应的RGB值,还能保证颜色唯一~

核心改进方向

  • 动态替换标注文本:把固定的"Rgb value"改成当前方块的实际RGB数值
  • 确保颜色唯一:如果要生成多个方块,需要避免重复的RGB组合
  • 优化视觉效果:调整文字位置让它更美观,甚至根据背景色亮度选择文字颜色(避免看不清)

版本1:单个带RGB标注的颜色方块

如果你只需要生成单个方块,直接修改文本内容并优化布局即可:

from PIL import Image, ImageDraw

# 自定义你的RGB颜色(也可以换成随机生成的)
target_rgb = (73, 109, 137)
# 创建足够容纳文字的图像(这里用150x50的尺寸)
img = Image.new('RGB', (150, 50), color=target_rgb)
draw = ImageDraw.Draw(img)

# 把RGB值转换成可读的字符串
rgb_label = f"RGB: {target_rgb[0]}, {target_rgb[1]}, {target_rgb[2]}"
# 调整文字位置,让它在方块里居中(也可以自己改坐标)
draw.text((10, 15), rgb_label, fill=(255, 255, 0))

img.save('single_color_block.png')

版本2:批量生成唯一颜色方块(带智能标注)

如果要生成多个不重复的颜色方块,我们可以用集合记录已使用的颜色,同时根据背景色亮度自动选择文字颜色(浅色背景用黑色,深色背景用白色,保证可读性):

from PIL import Image, ImageDraw
import random

# 配置参数
block_size = (150, 50)  # 单个方块的宽高
blocks_per_row = 2      # 每行放几个方块
total_blocks = 10       # 总共生成多少个方块
used_colors = set()     # 记录已使用的RGB颜色,确保唯一

# 计算画布总尺寸
rows = (total_blocks + blocks_per_row - 1) // blocks_per_row
canvas_size = (block_size[0] * blocks_per_row, block_size[1] * rows)

# 创建白色背景的画布
img = Image.new('RGB', canvas_size, color=(255, 255, 255))
draw = ImageDraw.Draw(img)

for idx in range(total_blocks):
    # 生成唯一的RGB颜色
    while True:
        r = random.randint(0, 255)
        g = random.randint(0, 255)
        b = random.randint(0, 255)
        current_color = (r, g, b)
        if current_color not in used_colors:
            used_colors.add(current_color)
            break
    
    # 计算当前方块的位置
    row = idx // blocks_per_row
    col = idx % blocks_per_row
    x_start = col * block_size[0]
    y_start = row * block_size[1]
    x_end = x_start + block_size[0]
    y_end = y_start + block_size[1]
    
    # 绘制颜色方块
    draw.rectangle([x_start, y_start, x_end, y_end], fill=current_color)
    
    # 生成RGB标注文本
    rgb_label = f"RGB: {r}, {g}, {b}"
    # 计算文字居中位置
    text_width, text_height = draw.textsize(rgb_label)
    text_x = x_start + (block_size[0] - text_width) // 2
    text_y = y_start + (block_size[1] - text_height) // 2
    
    # 根据背景色亮度选择文字颜色(用ITU-R BT.601亮度公式)
    brightness = r * 0.299 + g * 0.587 + b * 0.114
    text_color = (255, 255, 255) if brightness < 128 else (0, 0, 0)
    
    # 添加标注文字
    draw.text((text_x, text_y), rgb_label, fill=text_color)

img.save('multiple_unique_color_blocks.png')

关键细节说明

  • 用set()存储已使用的颜色,通过循环确保每次生成的RGB组合都是唯一的
  • 亮度计算公式是行业通用的,能有效判断背景色是偏亮还是偏暗,让文字始终清晰可见
  • 可以根据自己的需求修改方块尺寸、数量、每行个数等参数

内容的提问来源于stack exchange,提问作者Louis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:37:45