1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
import sys
import argparse
TYPES = ['hex', 'rgb', 'hsl', 'cmyk']
HEX_LETTERS = ['a', 'b', 'c', 'd', 'e', 'f']
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--hex', action='store_true', help='convert from hex (accepted formats: [ffffff] or ["#ffffff"])')
parser.add_argument('--rgb', action='store_true', help='convert from RGB (accepted formats: [R G B], [\"rgb(R, G, B)\"], and [\"rgb(R,G,B)\"])')
parser.add_argument('color', nargs='*', help='accepts a color in Hex, RGB, CYMK, or HSL and performs format conversions')
args = parser.parse_args()
print(args, '\n')
color = args.color
if len(color) == 0 :
print('ERROR: Must enter color code')
return
# HANDLE HEX INPUT
if args.hex :
color = color[0].strip('#')
if not validateHex(color) :
return
convertFromHex(color)
# HANDLE RGB INPUT
if args.rgb :
# cleanse any non-numerical stuff
if len(color) == 1 :
color = color[0].strip('rgb(').strip(')').split(',')
if not validateRGB(color) :
return
for i in range(len(color)) :
color[i] = int(color[i])
convertFromRGB(color)
##
# HEX CONVERSION SECTION
##
# Takes in valid RGB code and converts it to the other formats
def convertFromHex(hexCode) :
convertToRGB('hex', hexCode)
# convertToCMYK('hex', code)
# convertToHSL('hex', code)
def convertToHex(codeFormat, code) :
hexValue = '#'
if codeFormat == 'rgb' :
for rgbValue in code :
hexValue += hex(int(rgbValue / 16))
hexValue += hex(int(rgbValue % 16))
print('HEX: ', hexValue)
##
# RGB CONVERSION SECTION
##
# Takes in valid RGB code and converts it to the other formats
def convertFromRGB(code) :
convertToHex('rgb', code)
# convertToCMYK('rgb', code)
# convertToHSL('rgb', code)
def convertToRGB(codeFormat, code) :
rgbValue = ''
if codeFormat == 'hex' :
tempSum = 0
i = 0
while i < 6 :
tempSum += int(code[i], 16) * 16
tempSum += int(code[i+1], 16)
rgbValue += str(tempSum) + ' '
i = i + 2
tempSum = 0
print('RGB: ', rgbValue)
##
# INPUT VALIDATION SECTION
##
# Takes in a string. Returns True if valid Hex color code.
def validateHex(value) :
if len(value) != 6 :
print('ERROR: Hex value should have 6 digits')
return False
for i in range(len(value)):
if value[i-1].isnumeric() :
continue
elif HEX_LETTERS.count(value[i-1]) != 0 :
continue
else :
print('ERROR: Invalid character in hex code')
return False
return True
# Takes in a list of numerical strings. Returns True if valid RGB values.
def validateRGB(values) :
if len(values) != 3 :
print('ERROR: Improper number of values (should be 3)')
return False
for value in values :
if not value.strip().isnumeric() :
print('ERROR: Improper format for RGB value(s)')
return False
value = int(value)
if (value < 0) or (value > 255) :
print('ERROR: Each RBG value must be between 0-255')
return False
return True
# Takes in a decimal number and converts it to hexadecimal
def hex(number) :
number = int(number)
if number > 16 :
print("ERROR: Decimal to Hexidecimal conversion failed")
return "ERROR: Decimal to Hexidecimal conversion failed"
if number < 10 :
return str(number)
return HEX_LETTERS[number % 10]
if __name__ == '__main__' :
main()
|