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 +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: []
|