Complementary_Color 0.1.3 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -46
- data/Gemfile +2 -0
- data/lib/color/hsv.rb +116 -0
- data/lib/color/version.rb +1 -1
- data/lib/color.rb +29 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdbb722fb1da4e0fabc995ca007b9478d68104347ab4b396b9731be07b10b3d8
|
4
|
+
data.tar.gz: d136d63e85a53fbfc35e455801eae0a7c6d85b5e46b6978745ae196d464a8e9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40b5ea2d69c6f06341d790bbc914d23c475fb9a7e188ee22ddd4e362f23370a78a8145c68e46e0787e201520e7e348c067407d96019029f03d4f082d67398c2a
|
7
|
+
data.tar.gz: c8a3e6f543460f31db7b4067cdaf4073e2e1706eefb910b2be1e45b1dcc4b85eb690ebd0b30c79208a5d8d73c6de950e18335b110f934e5cffaf5b297850d26d
|
data/CHANGELOG.md
CHANGED
@@ -1,56 +1,15 @@
|
|
1
|
-
|
1
|
+
# Changelog
|
2
2
|
|
3
|
-
-
|
4
|
-
|
5
|
-
## [0.7.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.6.0...v0.7.0) (2022-06-25)
|
6
|
-
|
7
|
-
|
8
|
-
### Features
|
9
|
-
|
10
|
-
* test ([90475db](https://www.github.com/TimHi/Compelementary-Color/commit/90475db7a6b65740e69d02004b058531aa86497c))
|
11
|
-
|
12
|
-
## [0.6.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.5.0...v0.6.0) (2022-06-25)
|
13
|
-
|
14
|
-
|
15
|
-
### Features
|
16
|
-
|
17
|
-
* updating ci ([a50944c](https://www.github.com/TimHi/Compelementary-Color/commit/a50944c43d0dc3d3f996557b325a96ce17920aba))
|
18
|
-
|
19
|
-
## [0.5.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.4.0...v0.5.0) (2022-06-25)
|
20
|
-
|
21
|
-
|
22
|
-
### Features
|
23
|
-
|
24
|
-
* dummy commit to test action ([bf86695](https://www.github.com/TimHi/Compelementary-Color/commit/bf8669576ce8bb18f423d5d840353cee657a1fdd))
|
25
|
-
|
26
|
-
## [0.4.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.3.0...v0.4.0) (2022-06-25)
|
27
|
-
|
28
|
-
|
29
|
-
### Features
|
30
|
-
|
31
|
-
* test release ([eb004cd](https://www.github.com/TimHi/Compelementary-Color/commit/eb004cd523dbed9bf20d2b2d33eb0f4e1410771c))
|
32
|
-
|
33
|
-
## [0.3.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.2.0...v0.3.0) (2022-06-25)
|
3
|
+
## [0.10.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.9.0...v0.10.0) (2022-07-10)
|
34
4
|
|
35
5
|
|
36
6
|
### Features
|
37
7
|
|
38
|
-
*
|
8
|
+
* adding analogous color function ([31691d6](https://www.github.com/TimHi/Compelementary-Color/commit/31691d6de3cf9eb69f0da4647e05a5ffc862672c))
|
39
9
|
|
40
|
-
## [0.
|
10
|
+
## [0.9.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.8.0...v0.9.0) (2022-06-29)
|
41
11
|
|
42
12
|
|
43
13
|
### Features
|
44
14
|
|
45
|
-
*
|
46
|
-
|
47
|
-
## 0.1.0 (2022-06-25)
|
48
|
-
|
49
|
-
|
50
|
-
### Features
|
51
|
-
|
52
|
-
* dummy commit to test action ([6779bd9](https://www.github.com/TimHi/Compelementary-Color/commit/6779bd92d9621a8ba1a63e1868ae4f9f82fab89a))
|
53
|
-
|
54
|
-
## [0.1.0] - 2022-06-21
|
55
|
-
|
56
|
-
- Initial release
|
15
|
+
* creating release for monochromatic color generation ([06b84d0](https://www.github.com/TimHi/Compelementary-Color/commit/06b84d0e751238a103a2ede5e294588b811a8e54))
|
data/Gemfile
CHANGED
data/lib/color/hsv.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Offering functionality related to the HSV color model.
|
4
|
+
module HSV
|
5
|
+
HUE_MULTIPLIER = 60
|
6
|
+
RGB_MAX_VALUE = 255
|
7
|
+
ROUND_VALUE = 3
|
8
|
+
FULL_CIRCLE_DEG = 360
|
9
|
+
MONO_SATURATION = 0.2
|
10
|
+
MONO_VALUE = 0.1
|
11
|
+
|
12
|
+
# Add a value to the hue component of a hsv color
|
13
|
+
# Ensures that the hue is still in the range 0..360
|
14
|
+
def self.add_hue_to_hsv(hue_value, hsv_color_to_add)
|
15
|
+
hsv_color_to_add[0] += hue_value
|
16
|
+
hsv_color_to_add[0] %= FULL_CIRCLE_DEG
|
17
|
+
hsv_color_to_add
|
18
|
+
end
|
19
|
+
|
20
|
+
# Hex Colors can be represented with three characters, to work
|
21
|
+
def self.rgb_to_hsv(rgb_color)
|
22
|
+
max = rgb_color.max()
|
23
|
+
min = rgb_color.min()
|
24
|
+
r = rgb_color[0]
|
25
|
+
g = rgb_color[1]
|
26
|
+
b = rgb_color[2]
|
27
|
+
|
28
|
+
value = (max.to_f / RGB_MAX_VALUE).round(ROUND_VALUE)
|
29
|
+
max_min_diff = max - min
|
30
|
+
hue = calculate_hue(r, g, b, max_min_diff)
|
31
|
+
hue += FULL_CIRCLE_DEG if hue.negative?
|
32
|
+
[hue.round, calculate_saturation(max_min_diff, max, value), value]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.calculate_saturation(max_min_diff, max, value)
|
36
|
+
saturation = 0
|
37
|
+
saturation = (max_min_diff.to_f / max).round(ROUND_VALUE) if value.positive?
|
38
|
+
saturation
|
39
|
+
end
|
40
|
+
|
41
|
+
# Method to calculate the hue value of three given rgb colors and the difference
|
42
|
+
# of the max - min color.
|
43
|
+
def self.calculate_hue(red, green, blue, max_min_diff)
|
44
|
+
if red > green && red > blue
|
45
|
+
HUE_MULTIPLIER * calculate_raw_hue_value(0, green, blue, max_min_diff)
|
46
|
+
elsif green > red && green > blue
|
47
|
+
HUE_MULTIPLIER * calculate_raw_hue_value(2, blue, red, max_min_diff)
|
48
|
+
elsif blue > red && blue > green
|
49
|
+
HUE_MULTIPLIER * calculate_raw_hue_value(4, red, green, max_min_diff)
|
50
|
+
else
|
51
|
+
0
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.calculate_raw_hue_value(offset, first_color, second_color, max_min_diff)
|
56
|
+
offset + ((first_color - second_color).to_f / max_min_diff).round(ROUND_VALUE)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Calculate the a monochromatic value to a given color
|
60
|
+
def self.calculate_monochromatic_color(hue_color)
|
61
|
+
saturation = hue_color[1]
|
62
|
+
value = hue_color[2]
|
63
|
+
if saturation > 0.7
|
64
|
+
saturation -= MONO_SATURATION
|
65
|
+
else
|
66
|
+
saturation += MONO_SATURATION
|
67
|
+
end
|
68
|
+
value -= MONO_VALUE
|
69
|
+
[hue_color[0], saturation.round(ROUND_VALUE), value]
|
70
|
+
end
|
71
|
+
|
72
|
+
# rubocop:disable Metrics/AbcSize
|
73
|
+
# rubocop:disable Metrics/MethodLength
|
74
|
+
def self.hsv_to_rgb(hue, saturation, value)
|
75
|
+
hue = hue.to_f / FULL_CIRCLE_DEG
|
76
|
+
|
77
|
+
hue_i = (hue * 6).to_i
|
78
|
+
f = (hue * 6) - hue_i
|
79
|
+
p = value * (1 - saturation)
|
80
|
+
q = value * (1 - (f * saturation))
|
81
|
+
t = value * (1 - ((1 - f) * saturation))
|
82
|
+
if hue_i.zero?
|
83
|
+
red = value
|
84
|
+
green = t
|
85
|
+
blue = p
|
86
|
+
end
|
87
|
+
if hue_i == 1
|
88
|
+
red = q
|
89
|
+
green = value
|
90
|
+
blue = p
|
91
|
+
end
|
92
|
+
if hue_i == 2
|
93
|
+
red = p
|
94
|
+
green = value
|
95
|
+
blue = t
|
96
|
+
end
|
97
|
+
if hue_i == 3
|
98
|
+
red = p
|
99
|
+
green = q
|
100
|
+
blue = value
|
101
|
+
end
|
102
|
+
if hue_i == 4
|
103
|
+
red = t
|
104
|
+
green = p
|
105
|
+
blue = value
|
106
|
+
end
|
107
|
+
if hue_i == 5
|
108
|
+
red = value
|
109
|
+
green = p
|
110
|
+
blue = q
|
111
|
+
end
|
112
|
+
[(red * RGB_MAX_VALUE).round.abs, (green * RGB_MAX_VALUE).round.abs, (blue * RGB_MAX_VALUE).round.abs]
|
113
|
+
end
|
114
|
+
# rubocop:enable Metrics/AbcSize
|
115
|
+
# rubocop:enable Metrics/MethodLength
|
116
|
+
end
|
data/lib/color/version.rb
CHANGED
data/lib/color.rb
CHANGED
@@ -14,4 +14,33 @@ module ColoR
|
|
14
14
|
comp_r = [255 - rgb_color[0], 255 - rgb_color[1], 255 - rgb_color[2]]
|
15
15
|
::RGB.rgb_to_hex(comp_r)
|
16
16
|
end
|
17
|
+
|
18
|
+
def self.get_monochromatic_color(color)
|
19
|
+
raise HexCodeError.new("Not a valid Hex Color"), color unless ::Hex.hex?(color)
|
20
|
+
|
21
|
+
hue_color = hex_to_hsv(color)
|
22
|
+
mono_color = ::HSV.calculate_monochromatic_color(hue_color)
|
23
|
+
mono_rgb = ::HSV.hsv_to_rgb(mono_color[0], mono_color[1], mono_color[2])
|
24
|
+
::RGB.rgb_to_hex(mono_rgb)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.get_analogous_scheme(color)
|
28
|
+
raise HexCodeError.new("Not a valid Hex Color"), color unless ::Hex.hex?(color)
|
29
|
+
|
30
|
+
hsv_color = hex_to_hsv(color)
|
31
|
+
analogous_colors = []
|
32
|
+
analogous_colors.push(hsv_to_hex(HSV.add_hue_to_hsv(15, [hsv_color[0], hsv_color[1], hsv_color[2]])))
|
33
|
+
analogous_colors.push(hsv_to_hex(HSV.add_hue_to_hsv(330, [hsv_color[0], hsv_color[1], hsv_color[2]])))
|
34
|
+
analogous_colors
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.hex_to_hsv(hex_color)
|
38
|
+
rgb_color = ::RGB.hex_to_rgb(hex_color)
|
39
|
+
::HSV.rgb_to_hsv(rgb_color)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.hsv_to_hex(hsv_color)
|
43
|
+
rgb_color = ::HSV.hsv_to_rgb(hsv_color[0], hsv_color[1], hsv_color[2])
|
44
|
+
::RGB.rgb_to_hex(rgb_color)
|
45
|
+
end
|
17
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Complementary_Color
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Hiller
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Create complementary colors based on a given color.
|
14
14
|
email:
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- lib/color.rb
|
27
27
|
- lib/color/error/hex_code_error.rb
|
28
28
|
- lib/color/hex.rb
|
29
|
+
- lib/color/hsv.rb
|
29
30
|
- lib/color/rgb.rb
|
30
31
|
- lib/color/version.rb
|
31
32
|
- sig/color.rbs
|
@@ -36,7 +37,7 @@ metadata:
|
|
36
37
|
homepage_uri: https://github.com/TimHi/coloR
|
37
38
|
source_code_uri: https://github.com/TimHi/coloR
|
38
39
|
changelog_uri: https://github.com/TimHi/coloR/blob/main/CHANGELOG.md
|
39
|
-
rubygems_mfa_required: '
|
40
|
+
rubygems_mfa_required: 'true'
|
40
41
|
post_install_message:
|
41
42
|
rdoc_options: []
|
42
43
|
require_paths:
|
@@ -55,5 +56,5 @@ requirements: []
|
|
55
56
|
rubygems_version: 3.3.16
|
56
57
|
signing_key:
|
57
58
|
specification_version: 4
|
58
|
-
summary:
|
59
|
+
summary: Generate complementary colors based on a given color.
|
59
60
|
test_files: []
|