paleta 0.2.3 → 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/.gitignore +2 -1
- data/.travis.yml +9 -0
- data/Gemfile +3 -1
- data/lib/paleta.rb +11 -0
- data/lib/paleta/color.rb +3 -3
- data/lib/paleta/palette.rb +19 -28
- data/lib/paleta/version.rb +1 -1
- data/paleta.gemspec +1 -1
- data/readme.markdown +5 -0
- data/spec/models/palette_spec.rb +21 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3e1531d51066d39da5e89abe5aca0a8ac4ee15a
|
4
|
+
data.tar.gz: c74e22eec380ab93b18a57220c0bc95d81ecb9d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecd84c4445cffafb2f0f8d801a9601315bf375eddad66b9353c21304c9ea5801199f3d79d3cb82378a53454618c153a9a214ca0726f1cda7de793f5e92759f46
|
7
|
+
data.tar.gz: 3b46763b1cdf9568d835100c101d9bcd70e6138aaadbcac5b524606a5e2a2bce8a4e6fe50bd1fa8f75915c5f73c4be949299aa70b80c715fd48af80d8105860e
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/lib/paleta.rb
CHANGED
@@ -3,4 +3,15 @@ require 'paleta/color'
|
|
3
3
|
require 'paleta/palette'
|
4
4
|
|
5
5
|
module Paleta
|
6
|
+
class MissingDependencyError < StandardError; end
|
7
|
+
|
8
|
+
@rmagick_available = begin
|
9
|
+
require "rmagick"
|
10
|
+
rescue LoadError
|
11
|
+
false
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.rmagick_available?
|
15
|
+
@rmagick_available
|
16
|
+
end
|
6
17
|
end
|
data/lib/paleta/color.rb
CHANGED
@@ -302,9 +302,9 @@ module Paleta
|
|
302
302
|
else; @red, @green, @blue = 0, 0, 0
|
303
303
|
end
|
304
304
|
|
305
|
-
@red = 255 * (@red + d3)
|
306
|
-
@green = 255 * (@green + d3)
|
307
|
-
@blue = 255 * (@blue + d3)
|
305
|
+
@red = (255 * (@red + d3)).to_i
|
306
|
+
@green = (255 * (@green + d3)).to_i
|
307
|
+
@blue = (255 * (@blue + d3)).to_i
|
308
308
|
end
|
309
309
|
|
310
310
|
def update_hex
|
data/lib/paleta/palette.rb
CHANGED
@@ -1,38 +1,10 @@
|
|
1
1
|
require 'paleta/core_ext/math'
|
2
2
|
|
3
3
|
module Paleta
|
4
|
-
module MagickDependent
|
5
|
-
def self.included(klass)
|
6
|
-
require 'RMagick' unless defined?(Magick)
|
7
|
-
klass.extend(ClassMethods)
|
8
|
-
rescue LoadError
|
9
|
-
puts "You must install RMagick to use Palette.generate(:from => :image, ...)"
|
10
|
-
end
|
11
|
-
|
12
|
-
module ClassMethods
|
13
|
-
def generate_from_image(path, size = 5)
|
14
|
-
include Magick
|
15
|
-
begin
|
16
|
-
image = Magick::ImageList.new(path)
|
17
|
-
|
18
|
-
# quantize image to the nearest power of 2 greater the desired palette size
|
19
|
-
quantized_image = image.quantize((Math.sqrt(size).ceil ** 2), Magick::RGBColorspace)
|
20
|
-
colors = quantized_image.color_histogram.sort { |a, b| b[1] <=> a[1] }[0..(size - 1)].map do |color|
|
21
|
-
Paleta::Color.new(color[0].red / 256, color[0].green / 256, color[0].blue / 256)
|
22
|
-
end
|
23
|
-
return Paleta::Palette.new(colors)
|
24
|
-
rescue Magick::ImageMagickError
|
25
|
-
raise "Invalid image at " << path
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
4
|
# Represents a palette, a collection of {Color}s
|
32
5
|
class Palette
|
33
6
|
include Math
|
34
7
|
include Enumerable
|
35
|
-
include MagickDependent
|
36
8
|
|
37
9
|
attr_accessor :colors
|
38
10
|
|
@@ -237,6 +209,25 @@ module Paleta
|
|
237
209
|
|
238
210
|
private
|
239
211
|
|
212
|
+
def self.generate_from_image(path, size = 5)
|
213
|
+
unless Paleta.rmagick_available?
|
214
|
+
raise Paleta::MissingDependencyError, "You must install RMagick to use Palette.generate(:from => :image, ...)"
|
215
|
+
end
|
216
|
+
|
217
|
+
begin
|
218
|
+
image = Magick::ImageList.new(path)
|
219
|
+
|
220
|
+
# quantize image to the nearest power of 2 greater the desired palette size
|
221
|
+
quantized_image = image.quantize((Math.sqrt(size).ceil ** 2), Magick::RGBColorspace)
|
222
|
+
colors = quantized_image.color_histogram.sort { |a, b| b[1] <=> a[1] }[0..(size - 1)].map do |color|
|
223
|
+
Paleta::Color.new(color[0].red / 256, color[0].green / 256, color[0].blue / 256)
|
224
|
+
end
|
225
|
+
return Paleta::Palette.new(colors)
|
226
|
+
rescue Magick::ImageMagickError
|
227
|
+
raise "Invalid image at " << path
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
240
231
|
def self.generate_analogous_from_color(color, size)
|
241
232
|
raise(ArgumentError, "Passed argument is not a Color") unless color.is_a?(Color)
|
242
233
|
palette = self.new(color)
|
data/lib/paleta/version.rb
CHANGED
data/paleta.gemspec
CHANGED
@@ -17,5 +17,5 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
gem.add_development_dependency "rspec", "~> 2.8"
|
19
19
|
gem.add_development_dependency "guard-rspec", "~> 1.2"
|
20
|
-
gem.add_development_dependency
|
20
|
+
gem.add_development_dependency("pry-byebug", "~> 2.0") unless defined?(JRUBY_VERSION)
|
21
21
|
end
|
data/readme.markdown
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Paleta
|
2
2
|
|
3
|
+
[](https://travis-ci.org/jordanstephens/paleta)
|
4
|
+
[](https://codeclimate.com/github/jordanstephens/paleta)
|
5
|
+
[](https://gemnasium.com/jordanstephens/paleta)
|
6
|
+
|
7
|
+
|
3
8
|
A gem for working with color palettes
|
4
9
|
|
5
10
|
## Installation
|
data/spec/models/palette_spec.rb
CHANGED
@@ -224,15 +224,28 @@ describe Paleta::Palette do
|
|
224
224
|
end
|
225
225
|
end
|
226
226
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
227
|
+
unless defined?(JRUBY_VERSION)
|
228
|
+
it "should generate a Palette from an image" do
|
229
|
+
path = File.join(File.dirname(__FILE__), '..', 'images/test.jpg')
|
230
|
+
size = 5
|
231
|
+
palette = Paleta::Palette.generate(:from => :image, :image => path, :size => size)
|
232
|
+
palette.size.should == size
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should raise when generating a Palette from an image without RMagick" do
|
236
|
+
# stub Paleta.rmagick_available? to return false
|
237
|
+
allow(Paleta).to receive(:rmagick_available?).and_return(false)
|
233
238
|
|
234
|
-
|
235
|
-
|
239
|
+
path = File.join(File.dirname(__FILE__), '..', 'images/test.jpg')
|
240
|
+
size = 5
|
241
|
+
expect do
|
242
|
+
Paleta::Palette.generate(:from => :image, :image => path, :size => size)
|
243
|
+
end.to raise_error(Paleta::MissingDependencyError)
|
244
|
+
end
|
245
|
+
|
246
|
+
it "should raise an error when generating a Palette from an invalid image" do
|
247
|
+
expect{ Paleta::Palette.generate(:from => :image, :image => "/no/image.here") }.to raise_error(RuntimeError)
|
248
|
+
end
|
236
249
|
end
|
237
250
|
|
238
251
|
it "should return an array of colors, where each color is represented as an array of component values" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paleta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan Stephens
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
63
64
|
- Gemfile
|
64
65
|
- LICENSE
|
65
66
|
- lib/paleta.rb
|