rainbow_colors 0.2.0 → 0.3.0
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/lib/rainbow_colors/image_palette.rb +74 -0
- data/lib/rainbow_colors/palette.rb +7 -126
- data/lib/rainbow_colors/scheme.rb +86 -0
- data/lib/rainbow_colors/version.rb +1 -1
- data/lib/rainbow_colors.rb +2 -0
- data/server/.byebug_history +9 -0
- data/server/Gemfile +3 -0
- data/server/Gemfile.lock +20 -0
- data/server/img1.jpg +0 -0
- data/server/img10.jpg +0 -0
- data/server/img2.jpg +0 -0
- data/server/img3.jpg +0 -0
- data/server/img4.jpg +0 -0
- data/server/img5.jpg +0 -0
- data/server/img6.jpg +0 -0
- data/server/img7.jpg +0 -0
- data/server/img8.jpg +0 -0
- data/server/img9.png +0 -0
- data/server/server.rb +56 -0
- data/server/views/image.erb +25 -0
- data/server/views/index.erb +97 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 678e6300d2667bcdc5f2489b9cf5e9773bf086c5
|
4
|
+
data.tar.gz: d6acab94b85369acce7cfa2ab389ca82137c2e2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 631199957b99e4fb3976ee8fdcf414847e2102a065abd602ae66aa477bb4928fc94080d53553701e2fc4206bba09fa5f5266c081ac0a5eacd872a9a646b333c8
|
7
|
+
data.tar.gz: 76efeeab5b3fd30487ba9a8f5a4cffed40bf17e5783ab89dbec80bd9f8536e5cdd9c12c001e71d0f383b335ede6ee93b28479761634c017ccd917f974b55596e
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module RainbowColors
|
2
|
+
class ImagePalette
|
3
|
+
def initialize(image_path)
|
4
|
+
@image_path = image_path
|
5
|
+
end
|
6
|
+
|
7
|
+
def scheme
|
8
|
+
colors = image_colors
|
9
|
+
colors.map! { |rgb| RainbowColors::Convertor.hsl_from_rgb(rgb) }
|
10
|
+
|
11
|
+
# Round off HSL values to nearest 10. We don't need to worry about precision
|
12
|
+
colors.map! { |color_hsl| color_hsl.each { |key, value| color_hsl[key] = value.round(-1).to_f } }
|
13
|
+
|
14
|
+
# Remove colors that are too dark or too light
|
15
|
+
colors = colors.delete_if { |color_hsl| color_hsl[:saturation] <= 20 || color_hsl[:luminance] <= 20 || color_hsl[:luminance] >= 70 }
|
16
|
+
|
17
|
+
average_colors = []
|
18
|
+
# Get average color from hue ranges
|
19
|
+
# 12 * 30 = 360, i.e. all possible hues
|
20
|
+
12.times do |i|
|
21
|
+
next if i == 0
|
22
|
+
|
23
|
+
hue_floor = (i - 1) * 30
|
24
|
+
hue_ceil = i * 30
|
25
|
+
colors_for_range = colors.select { |color_hsl| color_hsl[:hue] >= hue_floor && color_hsl[:hue] < hue_ceil }
|
26
|
+
|
27
|
+
unless colors_for_range.empty?
|
28
|
+
hue_sum = saturation_sum = luminance_sum = 0
|
29
|
+
|
30
|
+
colors_for_range.each do |color_hsl|
|
31
|
+
hue_sum = hue_sum + color_hsl[:hue]
|
32
|
+
saturation_sum = saturation_sum + color_hsl[:saturation]
|
33
|
+
luminance_sum = luminance_sum + color_hsl[:luminance]
|
34
|
+
end
|
35
|
+
|
36
|
+
hue = hue_sum / colors_for_range.count
|
37
|
+
saturation = saturation_sum / colors_for_range.count
|
38
|
+
luminance = luminance_sum / colors_for_range.count
|
39
|
+
|
40
|
+
average_colors << { hue: hue.to_f, saturation: saturation.to_f, luminance: luminance.to_f }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
average_colors.map! { |color_hsl| RainbowColors::Convertor.hex_from_hsl color_hsl }
|
45
|
+
end
|
46
|
+
|
47
|
+
def color_background
|
48
|
+
RainbowColors::Convertor.hex_from_rgb image_colors.first
|
49
|
+
end
|
50
|
+
|
51
|
+
def color_text
|
52
|
+
background_rgb = RainbowColors::Convertor.rgb_from_hex color_background
|
53
|
+
background_brightness = Math.sqrt(
|
54
|
+
background_rgb[:red] ** 2 * 0.241 +
|
55
|
+
background_rgb[:green] ** 2 * 0.691 +
|
56
|
+
background_rgb[:blue] ** 2 * 0.068
|
57
|
+
)
|
58
|
+
background_brightness < 130 ? "#ffffff" : "#000000"
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def image_colors
|
64
|
+
image = Magick::ImageList.new(@image_path).quantize(2048, Magick::RGBColorspace)
|
65
|
+
colors = image.color_histogram.sort { |a,b| b[1] <=> a[1] }
|
66
|
+
colors.map! do |c|
|
67
|
+
red = c.first.red / 256
|
68
|
+
green = c.first.green / 256
|
69
|
+
blue = c.first.blue / 256
|
70
|
+
{ red: red, green: green, blue: blue }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -1,9 +1,5 @@
|
|
1
1
|
module RainbowColors
|
2
2
|
class Palette
|
3
|
-
def initialize(primary_color_hex)
|
4
|
-
@primary_color = primary_color_hex
|
5
|
-
end
|
6
|
-
|
7
3
|
def self.random_color
|
8
4
|
red = rand(255)
|
9
5
|
green = rand(255)
|
@@ -12,131 +8,16 @@ module RainbowColors
|
|
12
8
|
RainbowColors::Convertor.hex_from_rgb({ red: red, green: green, blue: blue })
|
13
9
|
end
|
14
10
|
|
15
|
-
def
|
16
|
-
secondary = color_with_variance 30
|
17
|
-
tertiary = color_with_variance -30
|
18
|
-
|
19
|
-
[@primary_color, secondary, tertiary]
|
20
|
-
end
|
21
|
-
|
22
|
-
def complementary
|
23
|
-
secondary = color_with_variance 180
|
24
|
-
|
25
|
-
[@primary_color, secondary]
|
26
|
-
end
|
27
|
-
|
28
|
-
def complementary_split
|
29
|
-
secondary = color_with_variance 150
|
30
|
-
tertiary = color_with_variance 210
|
31
|
-
|
32
|
-
[@primary_color, secondary, tertiary]
|
33
|
-
end
|
34
|
-
|
35
|
-
def triad
|
36
|
-
secondary = color_with_variance 120
|
37
|
-
tertiary = color_with_variance -120
|
38
|
-
|
39
|
-
[@primary_color, secondary, tertiary]
|
40
|
-
end
|
41
|
-
|
42
|
-
def tints
|
43
|
-
shades_tints "#ffffff"
|
44
|
-
end
|
45
|
-
|
46
|
-
def shades
|
47
|
-
shades_tints "#000000"
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.image_palette(image_path)
|
51
|
-
image = Magick::ImageList.new(image_path).quantize(256, Magick::RGBColorspace)
|
52
|
-
colors = image.color_histogram.sort { |a, b| b[1] <=> a[1] }
|
53
|
-
|
11
|
+
def self.adjust_saturation(colors, variance)
|
54
12
|
colors.map! do |c|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
# Round off HSL values to nearest 10. We don't need to worry about precision
|
63
|
-
colors.map! { |color_hsl| color_hsl.each { |key, value| color_hsl[key] = value.round(-1).to_f } }
|
64
|
-
|
65
|
-
# Remove colors that are too dark or too light
|
66
|
-
colors = colors.delete_if { |color_hsl| color_hsl[:saturation] <= 20 || color_hsl[:luminance] <= 20 || color_hsl[:luminance] >= 70 }
|
67
|
-
|
68
|
-
average_colors = []
|
69
|
-
# Get average color from hue ranges
|
70
|
-
# 12 * 30 = 360, i.e. all possible hues
|
71
|
-
12.times do |i|
|
72
|
-
next if i == 0
|
73
|
-
|
74
|
-
hue_floor = (i - 1) * 30
|
75
|
-
hue_ceil = i * 30
|
76
|
-
colors_for_range = colors.select { |color_hsl| color_hsl[:hue] >= hue_floor && color_hsl[:hue] <= hue_ceil }
|
77
|
-
|
78
|
-
unless colors_for_range.empty?
|
79
|
-
hue_sum = saturation_sum = luminance_sum = 0
|
80
|
-
|
81
|
-
colors_for_range.each do |color_hsl|
|
82
|
-
hue_sum = hue_sum + color_hsl[:hue]
|
83
|
-
saturation_sum = saturation_sum + color_hsl[:saturation]
|
84
|
-
luminance_sum = luminance_sum + color_hsl[:luminance]
|
85
|
-
end
|
86
|
-
|
87
|
-
hue = hue_sum / colors_for_range.count
|
88
|
-
saturation = saturation_sum / colors_for_range.count
|
89
|
-
luminance = luminance_sum / colors_for_range.count
|
90
|
-
|
91
|
-
average_colors << { hue: hue.to_f, saturation: saturation.to_f, luminance: luminance.to_f }
|
13
|
+
hsl = RainbowColors::Convertor.hsl_from_hex c
|
14
|
+
if variance > 0
|
15
|
+
hsl[:saturation] = hsl[:saturation] + variance if hsl[:saturation] + variance <= 100
|
16
|
+
else
|
17
|
+
hsl[:saturation] = hsl[:saturation] + variance if hsl[:saturation] + variance >= 0
|
92
18
|
end
|
19
|
+
RainbowColors::Convertor.hex_from_hsl hsl
|
93
20
|
end
|
94
|
-
|
95
|
-
average_colors.map! { |color_hsl| RainbowColors::Convertor.hex_from_hsl color_hsl }
|
96
|
-
end
|
97
|
-
|
98
|
-
private
|
99
|
-
|
100
|
-
def color_with_variance(variance)
|
101
|
-
rgb = RainbowColors::Convertor.rgb_from_hex @primary_color
|
102
|
-
hsl = RainbowColors::Convertor.hsl_from_rgb rgb
|
103
|
-
|
104
|
-
color = RainbowColors::Convertor.rgb_from_hsl({ hue: hsl[:hue] + variance, saturation: hsl[:saturation], luminance: hsl[:luminance] })
|
105
|
-
|
106
|
-
RainbowColors::Convertor.hex_from_rgb color
|
107
|
-
end
|
108
|
-
|
109
|
-
# Algorithm shamelessly stolen from SASS:
|
110
|
-
# https://github.com/sass/sass/blob/stable/lib/sass/script/functions.rb#L1313
|
111
|
-
def mix(color1, color2, weight)
|
112
|
-
color1 = RainbowColors::Convertor.rgb_from_hex color1
|
113
|
-
color2 = RainbowColors::Convertor.rgb_from_hex color2
|
114
|
-
|
115
|
-
p = weight / 100.0
|
116
|
-
w = p * 2 - 1
|
117
|
-
|
118
|
-
w1 = (w + 1) / 2
|
119
|
-
w2 = 1 - w1
|
120
|
-
|
121
|
-
r = (color1[:red] * w1 + color2[:red] * w2).round
|
122
|
-
g = (color1[:green] * w1 + color2[:green] * w2).round
|
123
|
-
b = (color1[:blue] * w1 + color2[:blue] * w2).round
|
124
|
-
|
125
|
-
RainbowColors::Convertor.hex_from_rgb({ red: r, green: g, blue: b })
|
126
|
-
end
|
127
|
-
|
128
|
-
def shades_tints(mix_color)
|
129
|
-
colors = [@primary_color]
|
130
|
-
|
131
|
-
weight = 0
|
132
|
-
increment = 15
|
133
|
-
|
134
|
-
4.times do
|
135
|
-
weight = weight + increment
|
136
|
-
colors.push mix(mix_color, @primary_color, weight)
|
137
|
-
end
|
138
|
-
|
139
|
-
colors
|
140
21
|
end
|
141
22
|
end
|
142
23
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module RainbowColors
|
2
|
+
class Scheme
|
3
|
+
def initialize(primary_color_hex)
|
4
|
+
@primary_color = primary_color_hex
|
5
|
+
end
|
6
|
+
|
7
|
+
def analogous
|
8
|
+
secondary = color_with_variance 30
|
9
|
+
tertiary = color_with_variance -30
|
10
|
+
|
11
|
+
[@primary_color, secondary, tertiary]
|
12
|
+
end
|
13
|
+
|
14
|
+
def complementary
|
15
|
+
secondary = color_with_variance 180
|
16
|
+
|
17
|
+
[@primary_color, secondary]
|
18
|
+
end
|
19
|
+
|
20
|
+
def complementary_split
|
21
|
+
secondary = color_with_variance 150
|
22
|
+
tertiary = color_with_variance 210
|
23
|
+
|
24
|
+
[@primary_color, secondary, tertiary]
|
25
|
+
end
|
26
|
+
|
27
|
+
def triad
|
28
|
+
secondary = color_with_variance 120
|
29
|
+
tertiary = color_with_variance -120
|
30
|
+
|
31
|
+
[@primary_color, secondary, tertiary]
|
32
|
+
end
|
33
|
+
|
34
|
+
def tints
|
35
|
+
shades_tints "#ffffff"
|
36
|
+
end
|
37
|
+
|
38
|
+
def shades
|
39
|
+
shades_tints "#000000"
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def color_with_variance(variance)
|
45
|
+
rgb = RainbowColors::Convertor.rgb_from_hex @primary_color
|
46
|
+
hsl = RainbowColors::Convertor.hsl_from_rgb rgb
|
47
|
+
|
48
|
+
color = RainbowColors::Convertor.rgb_from_hsl({ hue: hsl[:hue] + variance, saturation: hsl[:saturation], luminance: hsl[:luminance] })
|
49
|
+
|
50
|
+
RainbowColors::Convertor.hex_from_rgb color
|
51
|
+
end
|
52
|
+
|
53
|
+
# Algorithm shamelessly stolen from SASS:
|
54
|
+
# https://github.com/sass/sass/blob/stable/lib/sass/script/functions.rb#L1313
|
55
|
+
def mix(color1, color2, weight)
|
56
|
+
color1 = RainbowColors::Convertor.rgb_from_hex color1
|
57
|
+
color2 = RainbowColors::Convertor.rgb_from_hex color2
|
58
|
+
|
59
|
+
p = weight / 100.0
|
60
|
+
w = p * 2 - 1
|
61
|
+
|
62
|
+
w1 = (w + 1) / 2
|
63
|
+
w2 = 1 - w1
|
64
|
+
|
65
|
+
r = (color1[:red] * w1 + color2[:red] * w2).round
|
66
|
+
g = (color1[:green] * w1 + color2[:green] * w2).round
|
67
|
+
b = (color1[:blue] * w1 + color2[:blue] * w2).round
|
68
|
+
|
69
|
+
RainbowColors::Convertor.hex_from_rgb({ red: r, green: g, blue: b })
|
70
|
+
end
|
71
|
+
|
72
|
+
def shades_tints(mix_color)
|
73
|
+
colors = [@primary_color]
|
74
|
+
|
75
|
+
weight = 0
|
76
|
+
increment = 15
|
77
|
+
|
78
|
+
4.times do
|
79
|
+
weight = weight + increment
|
80
|
+
colors.push mix(mix_color, @primary_color, weight)
|
81
|
+
end
|
82
|
+
|
83
|
+
colors
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/rainbow_colors.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
exit
|
2
|
+
colors.sort_by { |hash| hash[:hue] }exit
|
3
|
+
colors.sort_by { |hash| hash[:hue] }
|
4
|
+
colors.sort { |a,b| a[:hue] <=> b[:hue] }
|
5
|
+
colors.sort_by { |hash| hash[:hue] }
|
6
|
+
colors_sort_by { |hash| hash[:hue] }
|
7
|
+
colors.sort_by(&:hue)
|
8
|
+
colors.first[:hue]
|
9
|
+
colors.first
|
data/server/Gemfile
ADDED
data/server/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
rack (1.6.4)
|
5
|
+
rack-protection (1.5.3)
|
6
|
+
rack
|
7
|
+
sinatra (1.4.7)
|
8
|
+
rack (~> 1.5)
|
9
|
+
rack-protection (~> 1.4)
|
10
|
+
tilt (>= 1.3, < 3)
|
11
|
+
tilt (2.0.2)
|
12
|
+
|
13
|
+
PLATFORMS
|
14
|
+
ruby
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
sinatra
|
18
|
+
|
19
|
+
BUNDLED WITH
|
20
|
+
1.11.2
|
data/server/img1.jpg
ADDED
Binary file
|
data/server/img10.jpg
ADDED
Binary file
|
data/server/img2.jpg
ADDED
Binary file
|
data/server/img3.jpg
ADDED
Binary file
|
data/server/img4.jpg
ADDED
Binary file
|
data/server/img5.jpg
ADDED
Binary file
|
data/server/img6.jpg
ADDED
Binary file
|
data/server/img7.jpg
ADDED
Binary file
|
data/server/img8.jpg
ADDED
Binary file
|
data/server/img9.png
ADDED
Binary file
|
data/server/server.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require "sinatra"
|
2
|
+
require "byebug"
|
3
|
+
require "rainbow_colors"
|
4
|
+
require "pp"
|
5
|
+
|
6
|
+
set :public_folder, File.dirname(__FILE__)
|
7
|
+
|
8
|
+
get '/' do
|
9
|
+
@triad = []
|
10
|
+
@analogous = []
|
11
|
+
@complementary = []
|
12
|
+
@complementary_split = []
|
13
|
+
@tints = []
|
14
|
+
@shades = []
|
15
|
+
for i in 0..30
|
16
|
+
cp = RainbowColors::Scheme.new RainbowColors::Palette.random_color
|
17
|
+
|
18
|
+
@triad.push cp.triad
|
19
|
+
@analogous.push cp.analogous
|
20
|
+
@complementary.push cp.complementary
|
21
|
+
@complementary_split.push cp.complementary_split
|
22
|
+
@tints.push cp.tints
|
23
|
+
@shades.push cp.shades
|
24
|
+
end
|
25
|
+
|
26
|
+
erb :index
|
27
|
+
end
|
28
|
+
|
29
|
+
get '/hex/:hex' do
|
30
|
+
@triad = []
|
31
|
+
@analogous = []
|
32
|
+
@complementary = []
|
33
|
+
@complementary_split = []
|
34
|
+
@tints = []
|
35
|
+
@shades = []
|
36
|
+
|
37
|
+
cp = RainbowColors::Scheme.new "##{params[:hex]}"
|
38
|
+
|
39
|
+
@triad.push cp.triad
|
40
|
+
@analogous.push cp.analogous
|
41
|
+
@complementary.push cp.complementary
|
42
|
+
@complementary_split.push cp.complementary_split
|
43
|
+
@tints.push cp.tints
|
44
|
+
@shades.push cp.shades
|
45
|
+
|
46
|
+
erb :index
|
47
|
+
end
|
48
|
+
|
49
|
+
get "/image" do
|
50
|
+
image = RainbowColors::ImagePalette.new params[:img]
|
51
|
+
colors = image.scheme
|
52
|
+
pp image.color_background
|
53
|
+
pp image.color_text
|
54
|
+
|
55
|
+
erb :image, locals: { colors: colors, image: params[:img] }
|
56
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<meta charset="utf-8">
|
3
|
+
<title>Rainbow Colors</title>
|
4
|
+
|
5
|
+
<style>
|
6
|
+
.color {
|
7
|
+
width: 100px;
|
8
|
+
display: inline-block;
|
9
|
+
float: left;
|
10
|
+
text-align: center;
|
11
|
+
line-height: 50px;
|
12
|
+
}
|
13
|
+
|
14
|
+
img {
|
15
|
+
max-height: 400px;
|
16
|
+
margin-bottom: 1rem;
|
17
|
+
display: block;
|
18
|
+
}
|
19
|
+
</style>
|
20
|
+
|
21
|
+
<img src="<%= image %>">
|
22
|
+
|
23
|
+
<% colors.each do |c| %>
|
24
|
+
<span class="color" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
25
|
+
<% end %>
|
@@ -0,0 +1,97 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<meta charset="utf-8">
|
3
|
+
|
4
|
+
<style>
|
5
|
+
h2 {
|
6
|
+
font-size: 14px;
|
7
|
+
font-family: Avenir Next;
|
8
|
+
}
|
9
|
+
|
10
|
+
.algorithm {
|
11
|
+
margin-right: 20px;
|
12
|
+
float: left;
|
13
|
+
}
|
14
|
+
|
15
|
+
.row {
|
16
|
+
margin-bottom: 2px;
|
17
|
+
}
|
18
|
+
|
19
|
+
.column {
|
20
|
+
font-size: 10px;
|
21
|
+
width: 50px;
|
22
|
+
height: 20px;
|
23
|
+
display: inline-block;
|
24
|
+
}
|
25
|
+
</style>
|
26
|
+
|
27
|
+
<div class="algorithm">
|
28
|
+
<h2>Analogous</h2>
|
29
|
+
|
30
|
+
<% @analogous.each do |s| %>
|
31
|
+
<div class="row">
|
32
|
+
<% s.each do |c| %>
|
33
|
+
<span class="column" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
<% end %>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="algorithm">
|
40
|
+
<h2>Triad</h2>
|
41
|
+
|
42
|
+
<% @triad.each do |s| %>
|
43
|
+
<div class="row">
|
44
|
+
<% s.each do |c| %>
|
45
|
+
<span class="column" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
46
|
+
<% end %>
|
47
|
+
</div>
|
48
|
+
<% end %>
|
49
|
+
</div>
|
50
|
+
|
51
|
+
<div class="algorithm">
|
52
|
+
<h2>Split Complementary</h2>
|
53
|
+
|
54
|
+
<% @complementary_split.each do |s| %>
|
55
|
+
<div class="row">
|
56
|
+
<% s.each do |c| %>
|
57
|
+
<span class="column" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
58
|
+
<% end %>
|
59
|
+
</div>
|
60
|
+
<% end %>
|
61
|
+
</div>
|
62
|
+
|
63
|
+
<div class="algorithm">
|
64
|
+
<h2>Complementary</h2>
|
65
|
+
|
66
|
+
<% @complementary.each do |s| %>
|
67
|
+
<div class="row">
|
68
|
+
<% s.each do |c| %>
|
69
|
+
<span class="column" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
70
|
+
<% end %>
|
71
|
+
</div>
|
72
|
+
<% end %>
|
73
|
+
</div>
|
74
|
+
|
75
|
+
<div class="algorithm">
|
76
|
+
<h2>Tints</h2>
|
77
|
+
|
78
|
+
<% @tints.each do |s| %>
|
79
|
+
<div class="row">
|
80
|
+
<% s.each do |c| %>
|
81
|
+
<span class="column" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
82
|
+
<% end %>
|
83
|
+
</div>
|
84
|
+
<% end %>
|
85
|
+
</div>
|
86
|
+
|
87
|
+
<div class="algorithm">
|
88
|
+
<h2>Shades</h2>
|
89
|
+
|
90
|
+
<% @shades.each do |s| %>
|
91
|
+
<div class="row">
|
92
|
+
<% s.each do |c| %>
|
93
|
+
<span class="column" style="background-color:<%= c %>;color:<%= c %>"><%= c %></span>
|
94
|
+
<% end %>
|
95
|
+
</div>
|
96
|
+
<% end %>
|
97
|
+
</div>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rainbow_colors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ashish Kumar
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-03-
|
12
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rmagick
|
@@ -87,9 +87,27 @@ files:
|
|
87
87
|
- config.ru
|
88
88
|
- lib/rainbow_colors.rb
|
89
89
|
- lib/rainbow_colors/convertor.rb
|
90
|
+
- lib/rainbow_colors/image_palette.rb
|
90
91
|
- lib/rainbow_colors/palette.rb
|
92
|
+
- lib/rainbow_colors/scheme.rb
|
91
93
|
- lib/rainbow_colors/version.rb
|
92
94
|
- rainbow_colors.gemspec
|
95
|
+
- server/.byebug_history
|
96
|
+
- server/Gemfile
|
97
|
+
- server/Gemfile.lock
|
98
|
+
- server/img1.jpg
|
99
|
+
- server/img10.jpg
|
100
|
+
- server/img2.jpg
|
101
|
+
- server/img3.jpg
|
102
|
+
- server/img4.jpg
|
103
|
+
- server/img5.jpg
|
104
|
+
- server/img6.jpg
|
105
|
+
- server/img7.jpg
|
106
|
+
- server/img8.jpg
|
107
|
+
- server/img9.png
|
108
|
+
- server/server.rb
|
109
|
+
- server/views/image.erb
|
110
|
+
- server/views/index.erb
|
93
111
|
homepage: https://github.com/ashishkumar/rainbow_colors
|
94
112
|
licenses:
|
95
113
|
- MIT
|