将十六进制颜色数组转换为RGB像素值时遇类型错误求助
解决十六进制颜色字符串转RGB像素值的报错问题
看来你是搞反了处理逻辑,还对字符串的解析方式有误,才触发了这个TypeError。我来帮你理清问题并给出靠谱的解决方案:
错误原因拆解
你手里的colors数组全是十六进制颜色字符串(比如#32CD32),但你写的代码['#%02x%02x%02x' % (c[0], c[1], c[2]) for c in colors]是在做「将RGB整数元组转成十六进制字符串」的操作——而且还写错了:遍历colors时每个c是字符串,c[0]是#,c[1]是3这类单个字符,根本不是整数,自然会触发%x format: an integer is required, not str的错误。
正确解决方案(十六进制转RGB像素值)
你的核心需求是把现有的十六进制颜色数组转换成RGB整数像素值(比如#32CD32 → (50, 205, 50)),可以这样实现:
方法1:基础循环解析(直观易懂)
import numpy as np colors = np.array(['#32CD32', '#CD5C5C', '#00BFFF', '#1E90FF', '#00008B', '#ADFF2F', '#B0E0E6', '#7CFC00', '#00008B', '#1E90FF', '#F08080', '#F08080', '#FA8072', '#0000FF', '#7CFC00', '#B0E0E6'], dtype='<U7') rgb_pixels = [] for color in colors: # 去掉开头的#号,提取纯十六进制部分 hex_part = color.strip('#') # 按每两位分割,转成十进制整数 r = int(hex_part[0:2], 16) g = int(hex_part[2:4], 16) b = int(hex_part[4:6], 16) rgb_pixels.append((r, g, b)) print(rgb_pixels)
方法2:简洁的列表推导式(适配numpy数组)
利用numpy的字符串方法批量处理,一行就能搞定:
rgb_pixels = [tuple(int(hex_str[i:i+2], 16) for i in (0, 2, 4)) for hex_str in colors.str.strip('#')]
如果你的需求其实是反过来(RGB整数转十六进制字符串),那需要确保colors是RGB整数元组的数组,比如[(50,205,50), ...],这时调整原代码就能用:
# 示例:RGB整数转十六进制 rgb_values = [(50, 205, 50), (205, 92, 92)] hex_colors = ['#%02x%02x%02x' % rgb for rgb in rgb_values]
内容的提问来源于stack exchange,提问作者eric lardon
相关产品推荐
相关产品推荐

