Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
87b74730
Commit
87b74730
authored
Sep 07, 1992
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New module 'colorsys' implements conversions between different color systems.
parent
e1783324
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
119 additions
and
0 deletions
+119
-0
Lib/colorsys.py
Lib/colorsys.py
+119
-0
No files found.
Lib/colorsys.py
0 → 100644
View file @
87b74730
# Conversion functions between RGB and other color systems.
#
# Define two functions for each color system XYZ:
# rgb_to_xyz(r, g, b) --> x, y, z
# xyz_to_rgb(x, y, z) --> r, g, b
# All inputs and outputs are triples of floats in the range [0.0...1.0].
# Inputs outside this range may cause exceptions or invalid outputs.
#
# Supported color systems:
# RGB: Red, Green, Blue components
# YIQ: used by composite video signals
# HLS: Hue, Luminance, S???
# HSV: Hue, Saturation, Value(?)
#
# References:
# XXX Where's the literature?
# Some floating point constants
ONE_THIRD
=
1.0
/
3.0
ONE_SIXTH
=
1.0
/
6.0
TWO_THIRD
=
2.0
/
3.0
# YIQ: used by composite video signals (linear combinations of RGB)
# Y: perceived grey level (0.0 == black, 1.0 == white)
# I, Q: color components
def
rgb_to_yiq
(
r
,
g
,
b
):
y
=
0.30
*
r
+
0.59
*
g
+
0.11
*
b
i
=
0.60
*
r
-
0.28
*
g
-
0.32
*
b
q
=
0.21
*
r
-
0.52
*
g
+
0.31
*
b
return
(
y
,
i
,
q
)
def
yiq_to_rgb
(
y
,
i
,
q
):
r
=
y
+
0.948262
*
i
+
0.624013
*
q
g
=
y
-
0.276066
*
i
-
0.639810
*
q
b
=
y
-
1.105450
*
i
+
1.729860
*
q
if
r
<
0.0
:
r
=
0.0
if
g
<
0.0
:
g
=
0.0
if
b
<
0.0
:
b
=
0.0
if
r
>
1.0
:
r
=
1.0
if
g
>
1.0
:
g
=
1.0
if
b
>
1.0
:
b
=
1.0
return
(
r
,
g
,
b
)
# HLS: Hue, Luminance, S???
# H: position in the spectrum
# L: ???
# S: ???
def
rgb_to_hls
(
r
,
g
,
b
):
maxc
=
max
(
r
,
g
,
b
)
minc
=
min
(
r
,
g
,
b
)
# XXX Can optimize (maxc+minc) and (maxc-minc)
l
=
(
minc
+
maxc
)
/
2.0
if
minc
==
maxc
:
return
0.0
,
l
,
0.0
if
l
<=
0.5
:
s
=
(
maxc
-
minc
)
/
(
maxc
+
minc
)
else
:
s
=
(
maxc
-
minc
)
/
(
2.0
-
maxc
-
minc
)
rc
=
(
maxc
-
r
)
/
(
maxc
-
minc
)
gc
=
(
maxc
-
g
)
/
(
maxc
-
minc
)
bc
=
(
maxc
-
b
)
/
(
maxc
-
minc
)
if
r
==
maxc
:
h
=
bc
-
gc
elif
g
==
maxc
:
h
=
2.0
+
rc
-
bc
else
:
h
=
4.0
+
gc
-
rc
h
=
(
h
/
6.0
)
%
1.0
return
h
,
l
,
s
def
hls_to_rgb
(
h
,
l
,
s
):
if
s
==
0.0
:
return
l
,
l
,
l
if
l
<=
0.5
:
m2
=
l
*
(
1.0
+
s
)
else
:
m2
=
l
+
s
-
(
l
*
s
)
m1
=
2.0
*
l
-
m2
return
(
_v
(
m1
,
m2
,
h
+
ONE_THIRD
),
_v
(
m1
,
m2
,
h
),
_v
(
m1
,
m2
,
h
-
ONE_THIRD
))
def
_v
(
m1
,
m2
,
hue
):
hue
=
hue
%
1.0
if
hue
<
ONE_SIXTH
:
return
m1
+
(
m2
-
m1
)
*
hue
*
6.0
if
hue
<
0.5
:
return
m2
if
hue
<
TWO_THIRD
:
return
m1
+
(
m2
-
m1
)
*
(
TWO_THIRD
-
hue
)
*
6.0
return
m1
# HSV: Hue, Saturation, Value(?)
# H: position in the spectrum
# S: ???
# V: ???
def
rgb_to_hsv
(
r
,
g
,
b
):
maxc
=
max
(
r
,
g
,
b
)
minc
=
min
(
r
,
g
,
b
)
v
=
maxc
if
minc
==
maxc
:
return
0.0
,
0.0
,
v
s
=
(
maxc
-
minc
)
/
maxc
rc
=
(
maxc
-
r
)
/
(
maxc
-
minc
)
gc
=
(
maxc
-
g
)
/
(
maxc
-
minc
)
bc
=
(
maxc
-
b
)
/
(
maxc
-
minc
)
if
r
==
maxc
:
h
=
bc
-
gc
elif
g
==
maxc
:
h
=
2.0
+
rc
-
bc
else
:
h
=
4.0
+
gc
-
rc
h
=
(
h
/
6.0
)
%
1.0
return
h
,
s
,
v
def
hsv_to_rgb
(
h
,
s
,
v
):
if
s
==
0.0
:
return
v
,
v
,
v
i
=
int
(
h
*
6.0
)
# XXX assume int() truncates!
f
=
(
h
*
6.0
)
-
i
p
=
v
*
(
1.0
-
s
)
q
=
v
*
(
1.0
-
s
*
f
)
t
=
v
*
(
1.0
-
s
*
(
1.0
-
f
))
if
i
%
6
==
0
:
return
v
,
t
,
p
if
i
==
1
:
return
q
,
v
,
p
if
i
==
2
:
return
p
,
v
,
t
if
i
==
3
:
return
p
,
q
,
v
if
i
==
4
:
return
t
,
p
,
v
if
i
==
5
:
return
v
,
p
,
q
# Cannot get here
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment