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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a380970a605d79d87714bc1b170012bd7eb4582eea80ed232807c6638d82f84
4
- data.tar.gz: afe9ddc86fd328eb4b90a7aa008e09a424ed93d07eb31f1adaf93004ed03cb3a
3
+ metadata.gz: fdbb722fb1da4e0fabc995ca007b9478d68104347ab4b396b9731be07b10b3d8
4
+ data.tar.gz: d136d63e85a53fbfc35e455801eae0a7c6d85b5e46b6978745ae196d464a8e9f
5
5
  SHA512:
6
- metadata.gz: 67c6835e8679f615226ec4ec699440cabcfec133369c997fb4265779f4192438de35ead8cfdfc821bcf0d0326f8ad41cde30e673e7b6e6f89b01c9e4b17623d7
7
- data.tar.gz: c359d74408e6bb159c6c15d336e5b602cb64d5b2100de28a54df178053341bbe2f2938d70fc1631eb79c6e93aeeef58ea8d3a11d24bd5fa9cae55c1131df1293
6
+ metadata.gz: 40b5ea2d69c6f06341d790bbc914d23c475fb9a7e188ee22ddd4e362f23370a78a8145c68e46e0787e201520e7e348c067407d96019029f03d4f082d67398c2a
7
+ data.tar.gz: c8a3e6f543460f31db7b4067cdaf4073e2e1706eefb910b2be1e45b1dcc4b85eb690ebd0b30c79208a5d8d73c6de950e18335b110f934e5cffaf5b297850d26d
data/CHANGELOG.md CHANGED
@@ -1,56 +1,15 @@
1
- ## [0.1.1] - 2022-06-24
1
+ # Changelog
2
2
 
3
- - First functionality added
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
- * dummy commit to test action ([4aa8117](https://www.github.com/TimHi/Compelementary-Color/commit/4aa81179154c56334191525e4dccb5ca054ea440))
8
+ * adding analogous color function ([31691d6](https://www.github.com/TimHi/Compelementary-Color/commit/31691d6de3cf9eb69f0da4647e05a5ffc862672c))
39
9
 
40
- ## [0.2.0](https://www.github.com/TimHi/Compelementary-Color/compare/v0.1.0...v0.2.0) (2022-06-25)
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
- * adding new tests ([1c4807e](https://www.github.com/TimHi/Compelementary-Color/commit/1c4807e2a762d084bd0e089c0b09c31b2854b2b1))
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
@@ -12,3 +12,5 @@ gem "minitest", "~> 5.0"
12
12
  gem "rubocop", "~> 1.21"
13
13
 
14
14
  gem "simplecov", require: false, group: :test
15
+
16
+ gem "shoulda", "~> 4.0"
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ColoR
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.6"
5
5
  end
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.3
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-06-25 00:00:00.000000000 Z
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: 'false'
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: Create complementary colors based on a given color.
59
+ summary: Generate complementary colors based on a given color.
59
60
  test_files: []