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 +4 -4
- data/bin/honeybii +11 -16
- data/lib/honeybii/ascii_image.rb +1 -1
- data/lib/honeybii/shaded_ascii.rb +29 -7
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 763645911defbc1bc1a275a6a14f923e1cef9416
|
4
|
+
data.tar.gz: fd62c1511c3928eb8f08bfaa444a5dd5f0cf31df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 851b901bdd0a4957fad14d666240c9a907dd6b09cc3b8e89d4fe36e1f6e84bc57e7bf9955d2312deb5536ca57dbb280e03bfac3999f85896d01eea76ecc2c964
|
7
|
+
data.tar.gz: b744ff4ba2cffa3edd324964f59f2e55a583c8855b8fac92ae976a65cc72187f391f55e7803aff2bf815172fcbd88b0a1436836daa719171b6bc5fb15dc6237f
|
data/bin/honeybii
CHANGED
@@ -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('-
|
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
|
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
|
-
|
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(
|
41
|
+
puts ShadedAscii.new(image, options[:pixel_size], gradient_level: options[:gradient_level], style: options[:style])
|
data/lib/honeybii/ascii_image.rb
CHANGED
@@ -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
|
-
@
|
40
|
-
|
41
|
-
|
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:
|
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-
|
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.
|
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.
|
27
|
-
|
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
|
67
|
+
summary: An image-to-ascii converter
|
62
68
|
test_files: []
|