color_converters 0.1.0 → 0.1.2
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/README.md +30 -21
- data/lib/{color_converter → color_converters}/base_converter.rb +6 -4
- data/lib/{color_converter → color_converters}/color.rb +2 -2
- data/lib/{color_converter/color_converters → color_converters/converters}/cielab_converter.rb +5 -5
- data/lib/{color_converter/color_converters/oklch_converter.rb → color_converters/converters/cielch_converter.rb} +8 -8
- data/lib/{color_converter/color_converters → color_converters/converters}/cmyk_converter.rb +1 -1
- data/lib/{color_converter/color_converters → color_converters/converters}/hex_converter.rb +2 -2
- data/lib/{color_converter/color_converters → color_converters/converters}/hsl_converter.rb +1 -1
- data/lib/{color_converter/color_converters → color_converters/converters}/hsl_string_converter.rb +1 -2
- data/lib/{color_converter/color_converters → color_converters/converters}/hsv_converter.rb +1 -1
- data/lib/{color_converter/color_converters → color_converters/converters}/name_converter.rb +3 -3
- data/lib/{color_converter/color_converters → color_converters/converters}/null_converter.rb +1 -1
- data/lib/{color_converter/color_converters → color_converters/converters}/rgb_converter.rb +1 -1
- data/lib/{color_converter/color_converters → color_converters/converters}/rgb_string_converter.rb +1 -2
- data/lib/{color_converter/color_converters → color_converters/converters}/xyz_converter.rb +1 -1
- data/lib/color_converters/version.rb +5 -0
- data/lib/color_converters.rb +28 -0
- metadata +18 -18
- data/lib/color_converter/version.rb +0 -5
- data/lib/color_converter.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 571bd439610154032f4532335702ecb175cd3b022b966843b81ebc26c12a5411
|
4
|
+
data.tar.gz: 33dad1ab16c74560c7fd4587392400002cc863ee16e77bff739e28577f1b9451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c9138a8fa458032dfcc2319a2d188a545e9042cfe740d168b737a5d984b4ec94501efce7d384a54baf3ea717384e6b9cc0fbebc8d085a2eb46c24879fa2cefb
|
7
|
+
data.tar.gz: 5cdd92b601b6458552e617413ff4cd1b884571009d5d565e727e47d57da202feb9e9b4b6a6e8ac0fd2592b612b055bc9aa78cbe530f85336bc5fb0d2a07ed236
|
data/README.md
CHANGED
@@ -41,49 +41,49 @@ Initialize a color:
|
|
41
41
|
|
42
42
|
```ruby
|
43
43
|
# from hex
|
44
|
-
color = Color.new("#3366cc")
|
45
|
-
color = Color.new("#36c")
|
44
|
+
color = ColorConverters::Color.new("#3366cc")
|
45
|
+
color = ColorConverters::Color.new("#36c")
|
46
46
|
|
47
47
|
# from rgb(a)
|
48
|
-
color = Color.new(r: 51, g: 102, b: 204)
|
49
|
-
color = Color.new(r: 51, g: 102, b: 204, a: 0.5)
|
48
|
+
color = ColorConverters::Color.new(r: 51, g: 102, b: 204)
|
49
|
+
color = ColorConverters::Color.new(r: 51, g: 102, b: 204, a: 0.5)
|
50
50
|
|
51
51
|
# from hsl(a)
|
52
|
-
color = Color.new(h: 225, s: 73, l: 57)
|
53
|
-
color = Color.new(h: 225, s: 73, l: 57, a: 0.5)
|
52
|
+
color = ColorConverters::Color.new(h: 225, s: 73, l: 57)
|
53
|
+
color = ColorConverters::Color.new(h: 225, s: 73, l: 57, a: 0.5)
|
54
54
|
|
55
55
|
# from hsv/hsb
|
56
|
-
color = Color.new(h: 220, s: 75, v: 80)
|
57
|
-
color = Color.new(h: 220, s: 75, b: 80)
|
56
|
+
color = ColorConverters::Color.new(h: 220, s: 75, v: 80)
|
57
|
+
color = ColorConverters::Color.new(h: 220, s: 75, b: 80)
|
58
58
|
|
59
59
|
# from cmyk
|
60
|
-
color = Color.new(c: 74, m: 58, y: 22, k: 3)
|
60
|
+
color = ColorConverters::Color.new(c: 74, m: 58, y: 22, k: 3)
|
61
61
|
|
62
62
|
# from xyz
|
63
|
-
color = Color.new(x: 16, y: 44, z: 32)
|
63
|
+
color = ColorConverters::Color.new(x: 16, y: 44, z: 32)
|
64
64
|
|
65
65
|
# from cielab
|
66
|
-
color = Color.new(l: 16, a: 44, b: 32)
|
66
|
+
color = ColorConverters::Color.new(l: 16, a: 44, b: 32, space: :cie)
|
67
67
|
|
68
|
-
# from
|
69
|
-
color = Color.new(l: 16, c: 44, h: 32)
|
68
|
+
# from cielch
|
69
|
+
color = ColorConverters::Color.new(l: 16, c: 44, h: 32, space: :cie)
|
70
70
|
|
71
71
|
# from textual color
|
72
|
-
color = Color.new("blue")
|
72
|
+
color = ColorConverters::Color.new("blue")
|
73
73
|
|
74
74
|
# from a css rgb(a) string
|
75
|
-
color = Color.new("rgb(51, 102, 204)")
|
76
|
-
color = Color.new("rgba(51, 102, 204, 0.5)")
|
75
|
+
color = ColorConverters::Color.new("rgb(51, 102, 204)")
|
76
|
+
color = ColorConverters::Color.new("rgba(51, 102, 204, 0.5)")
|
77
77
|
|
78
78
|
# from a css hsl(a) string
|
79
|
-
color = Color.new("hsl(225, 73%, 57%)")
|
80
|
-
color = Color.new("hsl(225, 73%, 57%, 0.5)")
|
79
|
+
color = ColorConverters::Color.new("hsl(225, 73%, 57%)")
|
80
|
+
color = ColorConverters::Color.new("hsl(225, 73%, 57%, 0.5)")
|
81
81
|
```
|
82
82
|
|
83
83
|
Converters
|
84
84
|
|
85
85
|
```ruby
|
86
|
-
color = Color.new(r: 70, g: 130, b: 180, a: 0.5)
|
86
|
+
color = ColorConverters::Color.new(r: 70, g: 130, b: 180, a: 0.5)
|
87
87
|
|
88
88
|
color.alpha
|
89
89
|
=> 0.5
|
@@ -109,7 +109,7 @@ color.xyz
|
|
109
109
|
color.cielab
|
110
110
|
=> {:l=>52.47, :a=>-4.08, :b=>-32.19}
|
111
111
|
|
112
|
-
color.
|
112
|
+
color.cielch
|
113
113
|
=> {:l=>52.47, :c=>32.45, :h=>262.78}
|
114
114
|
|
115
115
|
color.hex
|
@@ -121,13 +121,22 @@ color.name
|
|
121
121
|
|
122
122
|
## Options
|
123
123
|
|
124
|
+
### space
|
125
|
+
|
126
|
+
As there are certain color spaces that use the same letter keys, there needed to be a way to different between those space.
|
127
|
+
The space parameter allows that, with examples in the usage code above
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
ColorConverters::Color.new(l: 64, a: 28, b: -15, space: :cie)
|
131
|
+
```
|
132
|
+
|
124
133
|
### limit_override
|
125
134
|
|
126
135
|
By default all values are checked to be within the expected number ranges, i.e.; rgb between 0-255 each.
|
127
136
|
This parameter allows you to ignore those ranges and submit any values you want.
|
128
137
|
|
129
138
|
```ruby
|
130
|
-
Color.new(r: 270, g: 1300, b: 380, a: 0.5, limit_override: true)
|
139
|
+
ColorConverters::Color.new(r: 270, g: 1300, b: 380, a: 0.5, limit_override: true)
|
131
140
|
```
|
132
141
|
|
133
142
|
## Development
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'active_support/core_ext/object/blank'
|
2
2
|
|
3
|
-
module
|
3
|
+
module ColorConverters
|
4
4
|
class BaseConverter
|
5
5
|
IMPORT_DP = 2
|
6
6
|
OUTPUT_DP = 2
|
@@ -26,6 +26,8 @@ module ColorConverter
|
|
26
26
|
def initialize(color_input, limit_override = false)
|
27
27
|
@original_value = color_input
|
28
28
|
|
29
|
+
# self.clamp_input(color_input) if limit_clamp == true
|
30
|
+
|
29
31
|
if limit_override == false && !self.validate_input(color_input)
|
30
32
|
raise InvalidColorError # validation method is defined in each convertor
|
31
33
|
end
|
@@ -72,13 +74,13 @@ module ColorConverter
|
|
72
74
|
end
|
73
75
|
|
74
76
|
def cielab
|
75
|
-
l, a, b = CielabConverter.
|
77
|
+
l, a, b = CielabConverter.xyz_to_cielab(XyzConverter.rgb_to_xyz(self.rgb_array_frac))
|
76
78
|
|
77
79
|
{ l: l.round(OUTPUT_DP), a: a.round(OUTPUT_DP), b: b.round(OUTPUT_DP) }
|
78
80
|
end
|
79
81
|
|
80
|
-
def
|
81
|
-
l, c, h =
|
82
|
+
def cielch
|
83
|
+
l, c, h = CielchConverter.cielab_to_cielch(CielabConverter.xyz_to_cielab(XyzConverter.rgb_to_xyz(self.rgb_array_frac)))
|
82
84
|
|
83
85
|
{ l: l.round(OUTPUT_DP), c: c.round(OUTPUT_DP), h: h.round(OUTPUT_DP) }
|
84
86
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
module
|
1
|
+
module ColorConverters
|
2
2
|
class Color
|
3
3
|
extend Forwardable
|
4
|
-
def_delegators :@converter, :rgb, :hex, :hsl, :hsv, :hsb, :cmyk, :xyz, :cielab, :
|
4
|
+
def_delegators :@converter, :rgb, :hex, :hsl, :hsv, :hsb, :cmyk, :xyz, :cielab, :cielch, :name, :alpha
|
5
5
|
|
6
6
|
def initialize(color)
|
7
7
|
@converter = BaseConverter.factory(color)
|
data/lib/{color_converter/color_converters → color_converters/converters}/cielab_converter.rb
RENAMED
@@ -1,9 +1,9 @@
|
|
1
|
-
module
|
1
|
+
module ColorConverters
|
2
2
|
class CielabConverter < BaseConverter
|
3
3
|
def self.matches?(color_input)
|
4
4
|
return false unless color_input.is_a?(Hash)
|
5
5
|
|
6
|
-
color_input.keys - [:l, :a, :b] == []
|
6
|
+
color_input.keys - [:l, :a, :b, :space] == [] && color_input[:space].to_s == 'cie'
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.bounds
|
@@ -18,11 +18,11 @@ module ColorConverter
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_to_rgba(color_input)
|
21
|
-
xyz_hash = CielabConverter.
|
21
|
+
xyz_hash = CielabConverter.cielab_to_xyz(color_input)
|
22
22
|
XyzConverter.new(xyz_hash, limit_override: true).rgba
|
23
23
|
end
|
24
24
|
|
25
|
-
def self.
|
25
|
+
def self.cielab_to_xyz(color_input)
|
26
26
|
l = color_input[:l].to_f
|
27
27
|
a = color_input[:a].to_f
|
28
28
|
b = color_input[:b].to_f
|
@@ -48,7 +48,7 @@ module ColorConverter
|
|
48
48
|
{ x: x, y: y, z: z }
|
49
49
|
end
|
50
50
|
|
51
|
-
def self.
|
51
|
+
def self.xyz_to_cielab(xyz_array)
|
52
52
|
x, y, z = xyz_array
|
53
53
|
|
54
54
|
# The D65 standard illuminant white point
|
@@ -1,9 +1,9 @@
|
|
1
|
-
module
|
2
|
-
class
|
1
|
+
module ColorConverters
|
2
|
+
class CielchConverter < BaseConverter
|
3
3
|
def self.matches?(color_input)
|
4
4
|
return false unless color_input.is_a?(Hash)
|
5
5
|
|
6
|
-
color_input.keys - [:l, :c, :h] == []
|
6
|
+
color_input.keys - [:l, :c, :h, :space] == [] && color_input[:space].to_s == 'cie'
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.bounds
|
@@ -13,17 +13,17 @@ module ColorConverter
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def validate_input(color_input)
|
16
|
-
bounds =
|
16
|
+
bounds = CielchConverter.bounds
|
17
17
|
color_input[:l].to_f.between?(*bounds[:l]) && color_input[:c].to_f.between?(*bounds[:c]) && color_input[:h].to_f.between?(*bounds[:h])
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_to_rgba(color_input)
|
21
|
-
lab_hash =
|
22
|
-
xyz_hash = CielabConverter.
|
21
|
+
lab_hash = CielchConverter.cielch_to_cielab(color_input)
|
22
|
+
xyz_hash = CielabConverter.cielab_to_xyz(lab_hash)
|
23
23
|
XyzConverter.new(xyz_hash, limit_override: true).rgba
|
24
24
|
end
|
25
25
|
|
26
|
-
def self.
|
26
|
+
def self.cielch_to_cielab(color_input)
|
27
27
|
l = color_input[:l].to_f
|
28
28
|
c = color_input[:c].to_f
|
29
29
|
h = color_input[:h].to_f
|
@@ -36,7 +36,7 @@ module ColorConverter
|
|
36
36
|
{ l: l, a: a, b: b }
|
37
37
|
end
|
38
38
|
|
39
|
-
def self.
|
39
|
+
def self.cielab_to_cielch(lab_array)
|
40
40
|
l, aa, bb = lab_array
|
41
41
|
|
42
42
|
c = ((aa**2) + (bb**2))**0.5
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ColorConverters
|
2
2
|
class HexConverter < BaseConverter
|
3
3
|
def self.matches?(color)
|
4
4
|
return false unless color.is_a?(String)
|
@@ -9,8 +9,8 @@ module ColorConverter
|
|
9
9
|
private
|
10
10
|
|
11
11
|
def validate_input(color_input)
|
12
|
+
# TODO
|
12
13
|
true
|
13
|
-
# color_input[:l].to_f.between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
|
14
14
|
end
|
15
15
|
|
16
16
|
def input_to_rgba(color_input)
|
data/lib/{color_converter/color_converters → color_converters/converters}/hsl_string_converter.rb
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ColorConverters
|
2
2
|
class HslStringConverter < BaseConverter
|
3
3
|
def self.matches?(color_input)
|
4
4
|
return false unless color_input.is_a?(String)
|
@@ -10,7 +10,6 @@ module ColorConverter
|
|
10
10
|
|
11
11
|
def validate_input(color_input)
|
12
12
|
true
|
13
|
-
# color_input[:l].between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
|
14
13
|
end
|
15
14
|
|
16
15
|
def input_to_rgba(color_input)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ColorConverters
|
2
2
|
class NameConverter < BaseConverter
|
3
3
|
def self.matches?(color_input)
|
4
4
|
return false unless color_input.is_a?(String)
|
@@ -15,9 +15,9 @@ module ColorConverter
|
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
-
def validate_input(color_input)
|
18
|
+
def validate_input(color_input) #
|
19
|
+
# TODO: validate against list of keys?
|
19
20
|
true
|
20
|
-
# color_input[:l].between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
|
21
21
|
end
|
22
22
|
|
23
23
|
def input_to_rgba(color_input)
|
data/lib/{color_converter/color_converters → color_converters/converters}/rgb_string_converter.rb
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ColorConverters
|
2
2
|
class RgbStringConverter < BaseConverter
|
3
3
|
def self.matches?(color_input)
|
4
4
|
return false unless color_input.is_a?(String)
|
@@ -10,7 +10,6 @@ module ColorConverter
|
|
10
10
|
|
11
11
|
def validate_input(color_input)
|
12
12
|
true
|
13
|
-
# color_input[:l].between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
|
14
13
|
end
|
15
14
|
|
16
15
|
def input_to_rgba(color_input)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
require 'color_converters/version'
|
6
|
+
|
7
|
+
require 'color_converters/color'
|
8
|
+
require 'color_converters/base_converter'
|
9
|
+
|
10
|
+
require 'color_converters/converters/rgb_converter'
|
11
|
+
require 'color_converters/converters/rgb_string_converter'
|
12
|
+
require 'color_converters/converters/hex_converter'
|
13
|
+
require 'color_converters/converters/hsl_converter'
|
14
|
+
require 'color_converters/converters/hsl_string_converter'
|
15
|
+
require 'color_converters/converters/hsv_converter'
|
16
|
+
require 'color_converters/converters/cmyk_converter'
|
17
|
+
require 'color_converters/converters/xyz_converter'
|
18
|
+
require 'color_converters/converters/cielab_converter'
|
19
|
+
require 'color_converters/converters/cielch_converter'
|
20
|
+
|
21
|
+
require 'color_converters/converters/name_converter'
|
22
|
+
require 'color_converters/converters/null_converter'
|
23
|
+
|
24
|
+
module ColorConverters
|
25
|
+
class Error < StandardError; end
|
26
|
+
class InvalidColorError < Error; end
|
27
|
+
# Your code goes here...
|
28
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: color_converters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Louis Davis
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-06-
|
10
|
+
date: 2025-06-26 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activesupport
|
@@ -32,22 +32,22 @@ extra_rdoc_files: []
|
|
32
32
|
files:
|
33
33
|
- README.md
|
34
34
|
- Rakefile
|
35
|
-
- lib/
|
36
|
-
- lib/
|
37
|
-
- lib/
|
38
|
-
- lib/
|
39
|
-
- lib/
|
40
|
-
- lib/
|
41
|
-
- lib/
|
42
|
-
- lib/
|
43
|
-
- lib/
|
44
|
-
- lib/
|
45
|
-
- lib/
|
46
|
-
- lib/
|
47
|
-
- lib/
|
48
|
-
- lib/
|
49
|
-
- lib/
|
50
|
-
- lib/
|
35
|
+
- lib/color_converters.rb
|
36
|
+
- lib/color_converters/base_converter.rb
|
37
|
+
- lib/color_converters/color.rb
|
38
|
+
- lib/color_converters/converters/cielab_converter.rb
|
39
|
+
- lib/color_converters/converters/cielch_converter.rb
|
40
|
+
- lib/color_converters/converters/cmyk_converter.rb
|
41
|
+
- lib/color_converters/converters/hex_converter.rb
|
42
|
+
- lib/color_converters/converters/hsl_converter.rb
|
43
|
+
- lib/color_converters/converters/hsl_string_converter.rb
|
44
|
+
- lib/color_converters/converters/hsv_converter.rb
|
45
|
+
- lib/color_converters/converters/name_converter.rb
|
46
|
+
- lib/color_converters/converters/null_converter.rb
|
47
|
+
- lib/color_converters/converters/rgb_converter.rb
|
48
|
+
- lib/color_converters/converters/rgb_string_converter.rb
|
49
|
+
- lib/color_converters/converters/xyz_converter.rb
|
50
|
+
- lib/color_converters/version.rb
|
51
51
|
homepage: https://github.com/louiswdavis/color_converters
|
52
52
|
licenses:
|
53
53
|
- MIT
|
data/lib/color_converter.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'forwardable'
|
4
|
-
|
5
|
-
require 'color_converter/version'
|
6
|
-
|
7
|
-
require 'color_converter/color'
|
8
|
-
require 'color_converter/base_converter'
|
9
|
-
|
10
|
-
require 'color_converter/color_converters/rgb_converter'
|
11
|
-
require 'color_converter/color_converters/rgb_string_converter'
|
12
|
-
require 'color_converter/color_converters/hex_converter'
|
13
|
-
require 'color_converter/color_converters/hsl_converter'
|
14
|
-
require 'color_converter/color_converters/hsl_string_converter'
|
15
|
-
require 'color_converter/color_converters/hsv_converter'
|
16
|
-
require 'color_converter/color_converters/cmyk_converter'
|
17
|
-
require 'color_converter/color_converters/xyz_converter'
|
18
|
-
require 'color_converter/color_converters/cielab_converter'
|
19
|
-
require 'color_converter/color_converters/oklch_converter'
|
20
|
-
|
21
|
-
require 'color_converter/color_converters/name_converter'
|
22
|
-
require 'color_converter/color_converters/null_converter'
|
23
|
-
|
24
|
-
module ColorConverter
|
25
|
-
class Error < StandardError; end
|
26
|
-
class InvalidColorError < Error; end
|
27
|
-
# Your code goes here...
|
28
|
-
end
|