honeybii 1.3.0 → 2.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10bc5196f06fe471586df6e35a69c5fff47b2b16
4
- data.tar.gz: 1719cb9b941e8dc857bb840c1c5643cc33f7ec48
3
+ metadata.gz: 763645911defbc1bc1a275a6a14f923e1cef9416
4
+ data.tar.gz: fd62c1511c3928eb8f08bfaa444a5dd5f0cf31df
5
5
  SHA512:
6
- metadata.gz: a4c55d049c203be4b48ef84b45641ead8b6d582e5abf8631c99b0ed40075d39eb92ab90b670fe68be16b32769a79ef6af553623b93eb2e5066a47a6e3a531460
7
- data.tar.gz: dbe37caa9cf0e4c572695ff72031d443eacc6468e09f6196194f18f27ccf883f8bdc661ad63abc1a764e4094f3fbbcc6de103d5767d7e80fa064df00fe78958c
6
+ metadata.gz: 851b901bdd0a4957fad14d666240c9a907dd6b09cc3b8e89d4fe36e1f6e84bc57e7bf9955d2312deb5536ca57dbb280e03bfac3999f85896d01eea76ecc2c964
7
+ data.tar.gz: b744ff4ba2cffa3edd324964f59f2e55a583c8855b8fac92ae976a65cc72187f391f55e7803aff2bf815172fcbd88b0a1436836daa719171b6bc5fb15dc6237f
@@ -1,46 +1,41 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'optparse'
3
- require 'rmagick'
4
-
5
3
  require 'honeybii'
6
4
 
7
5
  options = {}
8
6
  option_parser = OptionParser.new do |opts|
9
- opts.banner = 'Usage: honeybii [options]'
10
-
11
- opts.on('-i', '--image FILENAME', 'Name of image file to convert (png|gif|jpg)') do |i|
12
- options[:image] = i
13
- end
7
+ opts.banner = 'Usage: honeybii file.(png|gif|jpg) [options]'
14
8
 
15
- opts.on('-s', '--pixel-size PIXELS', Integer, 'Size of image chunks to process into ascii (smaller => more detail) [default: 12]') do |s|
9
+ opts.on('-p', '--pixel-size PIXELS', Integer, 'Size of image chunks to process into ascii (smaller => more detail) [default: 12]') do |s|
16
10
  options[:pixel_size] = s
17
11
  end
18
12
 
19
13
  gradients = ShadedAscii.gradients.map.with_index { |g, i| {i => g.join} }
20
- opts.on('-g', '--gradient N', Integer, "Gradient level (the lower the denser) [default: 0] #{gradients}") do |g|
14
+ opts.on('-g', '--gradient N', Integer, "Gradient characters [default: 0] #{gradients}") do |g|
21
15
  options[:gradient_level] = g
22
16
  end
17
+
18
+ opts.on('-o', '--one-to-one', "One-to-one shading, as opposed to relative") do |o|
19
+ options[:style] = 'one_to_one'
20
+ end
23
21
  end
24
22
 
25
23
  option_parser.parse!
26
24
 
27
- if options.empty?
28
- puts option_parser.help
29
- exit
30
- end
31
-
32
25
  # required
33
- unless options[:image] && /.*\.(png|gif|jpg)$/i =~ options[:image]
26
+ image = ARGV.pop
27
+ unless image && /.*\.(png|gif|jpg)$/i =~ image
34
28
  raise ArgumentError, 'Please point to an image file (png|gif|jpg)'
35
29
  end
36
30
 
37
31
  # defaults
38
32
  options[:pixel_size] = 12 unless options[:pixel_size]
39
33
  options[:gradient_level] = 0 unless options[:gradient_level]
34
+ options[:style] = 'relative' unless options[:style]
40
35
 
41
36
  # validations
42
37
  unless options[:gradient_level].between? 0, ShadedAscii.gradients.size - 1
43
38
  raise ArgumentError, "Please choose a gradient level between 0 and #{ShadedAscii.gradients.size - 1}"
44
39
  end
45
40
 
46
- puts ShadedAscii.new(options[:image], options[:pixel_size], gradient_level: options[:gradient_level])
41
+ puts ShadedAscii.new(image, options[:pixel_size], gradient_level: options[:gradient_level], style: options[:style])
@@ -1,4 +1,4 @@
1
- require 'rmagick'
1
+ require 'RMagick'
2
2
 
3
3
  class AsciiImage
4
4
  attr_accessor :raw
@@ -4,17 +4,15 @@ class ShadedAscii < AsciiImage
4
4
  end
5
5
 
6
6
  @gradients = [
7
- ['M', 'N', 'H', 'K', 'b', 'X', '6', 'Y', 'j', 'i', '+', '!', ':', '\'', '.', ' '],
8
7
  ['@', '%', '8', '#', '$', 'V', 'Y', 'x', '*', '=', '+', ':', '~', '-', '.', ' '],
9
- ['M', 'H', 'b', '6', 'j', '+', ':', ' '],
10
- ['@', '8', 'O', 'o', ':', '.', ' '],
11
8
  ['8', 'O', 'o', ':', '.', ' '],
12
9
  ['#', '+', ':', ' '],
13
10
  ]
14
11
 
15
- def initialize(image_filename, point_size = 12, gradient_level: 0)
12
+ def initialize(image_filename, point_size = 12, gradient_level: 0, style: 'one_to_one')
16
13
  super image_filename, point_size
17
14
  @gradient = ShadedAscii.gradients[gradient_level]
15
+ @style = style
18
16
  to_ascii!
19
17
  end
20
18
 
@@ -28,6 +26,18 @@ class ShadedAscii < AsciiImage
28
26
  @raw.resize!(columns, rows)
29
27
  end
30
28
 
29
+ def get_intensity_range
30
+ pixels = @raw.get_pixels 0, 0, @raw.columns, @raw.rows
31
+ intensities = pixels.map { |p| p.intensity }
32
+ lightest_intensity = intensities.inject do |lightest, obj|
33
+ obj > lightest ? lightest : obj
34
+ end
35
+ heaviest_intensity = intensities.inject do |heaviest, obj|
36
+ obj < heaviest ? heaviest : obj
37
+ end
38
+ return [lightest_intensity, heaviest_intensity]
39
+ end
40
+
31
41
  def to_ascii!
32
42
  grayscale!
33
43
  pixelate!
@@ -36,9 +46,21 @@ class ShadedAscii < AsciiImage
36
46
  Array.new(@raw.columns)
37
47
  end
38
48
 
39
- @raw.each_pixel do |pixel, col, row|
40
- index = (((@gradient.size - 1) * pixel.intensity).to_f / 65535.to_f).round
41
- ascii_array[row][col] = @gradient[index]
49
+ gradient_size = (@gradient.size - 1).to_f
50
+
51
+ if @style == 'relative'
52
+ intensity_range = get_intensity_range
53
+ range_max = intensity_range[1] - intensity_range[0]
54
+ @raw.each_pixel do |pixel, col, row|
55
+ index = (gradient_size * (pixel.intensity - intensity_range[0]) / range_max).round
56
+ ascii_array[row][col] = @gradient[index]
57
+ end
58
+ elsif @style == 'one_to_one'
59
+ range_max = 65535.to_f
60
+ @raw.each_pixel do |pixel, col, row|
61
+ index = (gradient_size * pixel.intensity / range_max).round
62
+ ascii_array[row][col] = @gradient[index]
63
+ end
42
64
  end
43
65
 
44
66
  @ascii = ascii_array.map { |row| row.join }.join("\n")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybii
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamey DeOrio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-04 00:00:00.000000000 Z
11
+ date: 2014-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rmagick
@@ -16,15 +16,21 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '2.13'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.13.2
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '2.0'
27
- description: A command-line image to ascii conversion tool
29
+ version: '2.13'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.13.2
33
+ description: A command-line image-to-ascii conversion tool
28
34
  email: jamey@jameydeorio.com
29
35
  executables:
30
36
  - honeybii
@@ -58,5 +64,5 @@ rubyforge_project:
58
64
  rubygems_version: 2.2.0
59
65
  signing_key:
60
66
  specification_version: 4
61
- summary: An image to ascii converter
67
+ summary: An image-to-ascii converter
62
68
  test_files: []