honeybii 1.3.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []