2011-07-05 2 views
4

PHP에서 색상 그라디언트를 반환하는 함수를 수정했습니다 (http://www.herethere.net/~samson/php/color_gradient/color_gradient_generator.php.txt). 0으로 끝나는 색상 16 진수 코드를 반환 할 때 문제가 있습니다. 내가 흑인 인 # 000000 쳐다 루프를 실행하면, 난 단지, f0f0f을 두 번째 코드를 0 반환도 0파이썬의 16 진수 색상에 대한 문자열 포맷

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 

공지 사항이 없습니다

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)) 

:이 기능입니다 처음 두 16 진 코드. 반환 값의 형식을 올바르게 지정하여 000000을 반환하는 방법에 대한 의견이 있으십니까?

답변

9
>>> print '{0:06x}'.format(123) 
00007b