如何使用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
相关产品推荐
相关产品推荐

