lsrs-color_palette 0.0.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.
Files changed (5) hide show
  1. data/README.rdoc +28 -0
  2. data/Rakefile +13 -0
  3. data/bin/color_palette +145 -0
  4. data/color_palette.gemspec +36 -0
  5. metadata +71 -0
data/README.rdoc ADDED
@@ -0,0 +1,28 @@
1
+ #!/opt/local/bin/ruby
2
+
3
+ # == Synopsis
4
+ # color_palette prints the colors used in an image in order of usage.
5
+ #
6
+ # == Examples
7
+ # This command prints the 32 most used colors in the image barbie.jpg
8
+ # color_palette barbie.jpg
9
+ #
10
+ # Other examples:
11
+ # color_palette -n 16 barbie.jpg
12
+ #
13
+ # == Usage
14
+ # color_palette [options] image_file
15
+ #
16
+ # For help use: color_palette -h
17
+ #
18
+ # == Options
19
+ # -h, --help Displays help message
20
+ # -v, --version Display the version, then exit
21
+ # -n [NUM] Set the number of colors to print in the palette (default is 32)
22
+ #
23
+ # == Author
24
+ # Matthew Shanley
25
+ #
26
+ # == Copyright
27
+ # Copyright (c) 2008 Matthew Shanley. Licensed under the MIT License:
28
+ # http://www.opensource.org/licenses/mit-license.php
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('color_palette', '0.0.2') do |p|
6
+ p.description = 'Describes the color palette of a given image.'
7
+ p.url = 'http://github.com/lsrs/color_palette/'
8
+ p.author = 'Matthew Shanley'
9
+ p.email = 'matthewshanley@littlesecretsrecords.com'
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ end
12
+
13
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each {|ext| load ext }
data/bin/color_palette ADDED
@@ -0,0 +1,145 @@
1
+ #!/opt/local/bin/ruby
2
+
3
+ # == Synopsis
4
+ # color_palette prints the colors used in an image in order of usage.
5
+ #
6
+ # == Examples
7
+ # This command prints the 32 most used colors in the image barbie.jpg
8
+ # color_palette barbie.jpg
9
+ #
10
+ # Other examples:
11
+ # color_palette -n 16 barbie.jpg
12
+ #
13
+ # == Usage
14
+ # color_palette [options] image_file
15
+ #
16
+ # For help use: color_palette -h
17
+ #
18
+ # == Options
19
+ # -h, --help Displays help message
20
+ # -v, --version Display the version, then exit
21
+ # -n [NUM] Set the number of colors to print in the palette (default is 32)
22
+ #
23
+ # == Author
24
+ # Matthew Shanley
25
+ #
26
+ # == Copyright
27
+ # Copyright (c) 2008 Matthew Shanley. Licensed under the MIT License:
28
+ # http://www.opensource.org/licenses/mit-license.php
29
+
30
+
31
+ require 'optparse'
32
+ require 'rubygems'
33
+ require 'RMagick'
34
+ require 'rdoc/usage'
35
+ require 'ostruct'
36
+
37
+ include Magick
38
+
39
+
40
+ class App
41
+ VERSION = '0.0.2'
42
+
43
+ attr_reader :options
44
+
45
+ def initialize(arguments, stdin)
46
+ @arguments = arguments
47
+ @stdin = stdin
48
+
49
+ # Set defaults
50
+ @options = OpenStruct.new
51
+ @options.num_colors = 32
52
+ end
53
+
54
+
55
+ # Parse options, check arguments, then process the command
56
+ def run
57
+ if parsed_options? && arguments_valid?
58
+
59
+ process_arguments
60
+ process_command
61
+
62
+ else
63
+ output_usage
64
+ end
65
+ end
66
+
67
+
68
+ private
69
+
70
+ def parsed_options?
71
+ # Specify options
72
+ opts = OptionParser.new
73
+ opts.on('-v', '--version') { output_version ; exit 0}
74
+ opts.on('-h', '--help') { output_help }
75
+ opts.on('-n [NUM]') {|num| @options.num_colors = num.to_i }
76
+
77
+ opts.parse!(@arguments) rescue return false
78
+
79
+ true
80
+ end
81
+
82
+ def output_options
83
+ puts "Options:\n"
84
+
85
+ @options.marshal_dump.each do |name, val|
86
+ puts " #{name} = #{val}"
87
+ end
88
+ end
89
+
90
+ # True if required arguments were provided
91
+ def arguments_valid?
92
+ true if @arguments.length >= 1
93
+ end
94
+
95
+ # Setup the arguments
96
+ def process_arguments
97
+ # Get the file to work on
98
+ @img_file = ARGV[0]
99
+ end
100
+
101
+ def output_help
102
+ output_version
103
+ RDoc::usage() # exits app
104
+ end
105
+
106
+ def output_usage
107
+ RDoc::usage('usage') # gets usage from comments above
108
+ end
109
+
110
+ def output_version
111
+ puts "#{File.basename(__FILE__)} version #{VERSION}"
112
+ end
113
+
114
+ def process_command
115
+
116
+ # Read in image
117
+ img_array = Image.read(@img_file)
118
+
119
+ # Check that there's at least one image
120
+ if img_array.size < 1
121
+ abort("Not a valid image.")
122
+ end
123
+
124
+ # Get the first image (we'll only deal with one)
125
+ img = img_array[0]
126
+
127
+ # Reduce the number of colors in the image to match the number we'll output.
128
+ # Don't dither the image.
129
+ img = img.quantize(@options.num_colors, Magick::RGBColorspace, false)
130
+
131
+ # Get the histogram of all the colors, sorting by descending value
132
+ hist = img.color_histogram.sort {|a,b| b[1]<=>a[1]}
133
+
134
+ hist.each do |key, value|
135
+ # TODO Provide options for other forms of output, like RRR, GGG, BBB
136
+ puts "#{key.to_color(AllCompliance, false, 8)}"
137
+ end
138
+
139
+ end
140
+ end
141
+
142
+
143
+ # Create and run the application
144
+ app = App.new(ARGV, STDIN)
145
+ app.run
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{color_palette}
5
+ s.version = "0.0.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Matthew Shanley"]
9
+ s.date = %q{2009-01-24}
10
+ s.default_executable = %q{color_palette}
11
+ s.description = %q{Describes the color palette of a given image.}
12
+ s.email = %q{matthewshanley@littlesecretsrecords.com}
13
+ s.executables = ["color_palette"]
14
+ s.extra_rdoc_files = ["bin/color_palette", "README.rdoc"]
15
+ s.files = ["bin/color_palette", "Manifest", "Rakefile", "README.rdoc", "color_palette.gemspec"]
16
+ s.has_rdoc = true
17
+ s.homepage = %q{http://github.com/lsrs/color_palette/}
18
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Color_palette", "--main", "README.rdoc"]
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{color_palette}
21
+ s.rubygems_version = %q{1.3.1}
22
+ s.summary = %q{Describes the color palette of a given image.}
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 2
27
+
28
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
29
+ s.add_development_dependency(%q<echoe>, [">= 0"])
30
+ else
31
+ s.add_dependency(%q<echoe>, [">= 0"])
32
+ end
33
+ else
34
+ s.add_dependency(%q<echoe>, [">= 0"])
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lsrs-color_palette
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Matthew Shanley
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-24 00:00:00 -08:00
13
+ default_executable: color_palette
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: echoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ description: Describes the color palette of a given image.
25
+ email: matthewshanley@littlesecretsrecords.com
26
+ executables:
27
+ - color_palette
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - bin/color_palette
32
+ - README.rdoc
33
+ files:
34
+ - bin/color_palette
35
+ - Manifest
36
+ - Rakefile
37
+ - README.rdoc
38
+ - color_palette.gemspec
39
+ has_rdoc: true
40
+ homepage: http://github.com/lsrs/color_palette/
41
+ post_install_message:
42
+ rdoc_options:
43
+ - --line-numbers
44
+ - --inline-source
45
+ - --title
46
+ - Color_palette
47
+ - --main
48
+ - README.rdoc
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "1.2"
62
+ version:
63
+ requirements: []
64
+
65
+ rubyforge_project: color_palette
66
+ rubygems_version: 1.2.0
67
+ signing_key:
68
+ specification_version: 2
69
+ summary: Describes the color palette of a given image.
70
+ test_files: []
71
+