paleta 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/jordanstephens/paleta.svg?branch=master)](https://travis-ci.org/jordanstephens/paleta)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/jordanstephens/paleta/badges/gpa.svg)](https://codeclimate.com/github/jordanstephens/paleta)
|
5
|
+
[![Dependency Status](https://gemnasium.com/jordanstephens/paleta.svg)](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
|