Python中的十六进制颜色字符串格式化
我修改了一个PHP函数,让它可以返回颜色渐变(http://www.herethere.net/~samson/php/color_gradient/color_gradient_generator.php.txt)。不过我在返回以0结尾的颜色十六进制代码时遇到了一些问题。这个函数是:
def _get_color(current_step=0, start='000000', end='ffffff', max_steps=16):
'''
Returns the color code for current_step between start and end
'''
start = '{0:#x}'.format(int(start, 16))
end = '{0:#x}'.format(int(end, 16))
if int(max_steps) > 0 & int(max_steps) < 256:
max_steps = max_steps
else:
max_steps = 16
r0 = (int(start, 16) & 0xff0000) >> 16
g0 = (int(start, 16) & 0x00ff00) >> 8
b0 = (int(start, 16) & 0x0000ff) >> 0
r1 = (int(end, 16) & 0xff0000) >> 16
g1 = (int(end, 16) & 0x00ff00) >> 8
b1 = (int(end, 16) & 0x0000ff) >> 0
if r0 < r1:
r = int(((r1-r0)*(float(current_step)/float(max_steps)))+r0)
else:
r = int(((r0-r1)*(1-(float(current_step)/float(max_steps))))+r1)
if g0 < g1:
g = int(((g1-g0)*(float(current_step)/float(max_steps)))+g0)
else:
g = int(((g0-g1)*(1-(float(current_step)/float(max_steps))))+g1)
if b0 < b1:
b = int(((b1-b0)*(float(current_step)/float(max_steps)))+b0)
else:
b = int(((b0-b1)*(1-(float(current_step)/float(max_steps))))+b1)
return '{0:#x}'.format(((((r << 8) | g) << 8) | b))
当我从#000000(黑色)开始循环时,结果只返回了0。而第二个代码f0f0f也缺少了一个0。
for i in range(0, 16):
print _get_color(current_step=i, start='000000', end='ffffff', max_steps=16)
0
f0f0f
1f1f1f
2f2f2f
3f3f3f
4f4f4f
5f5f5f
6f6f6f
7f7f7f
8f8f8f
9f9f9f
afafaf
bfbfbf
cfcfcf
dfdfdf
efefef
注意前两个十六进制代码。有没有什么想法可以正确格式化返回值,以便返回000000?
1 个回答
9
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实很多时候,解决方案就在于理解这些工具的工作原理。
比如说,当你在写代码的时候,可能会发现某个功能没有按照预期工作。这时候,你可以尝试查看文档,或者在网上搜索一下,看看有没有人遇到过类似的问题。很多时候,社区里的其他人会分享他们的经验和解决方法,这对我们来说是很有帮助的。
记住,编程是一门需要不断学习和实践的技能。遇到问题时,不要气馁,慢慢来,总会找到解决办法的。
>>> print '{0:06x}'.format(123)
00007b