image2ascii 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/image2ascii +58 -0
  3. data/lib/image2ascii.rb +82 -0
  4. metadata +49 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 71a51c97ec1912badd506a37658d8187d74443cefafea2c1682192827185fb22
4
+ data.tar.gz: a454214604deff3235a94750af750c868db33fc0c9c19b1fcd610dae8d08e40d
5
+ SHA512:
6
+ metadata.gz: 9012fe24c4a8888f22a5902921c5cabe047bc7c71d16df26f0520769c5f7576b229dfba09b7a58df8c9a121be9a7ff3d8ae78befda3cf0379125622ecdbf2c67
7
+ data.tar.gz: 220eaf2e542d95f1acae107933fa571b0f13c89592dda98dce08461997252be7019b8b026b695bd5d8a0c3dcd63dac80cc40b52db476c9a3625a1b0ac9879245
data/bin/image2ascii ADDED
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+ require 'image2ascii'
4
+
5
+ options = {}
6
+ OptionParser.new do |parser|
7
+ parser.banner = "Usage: image2ascii [image] [options]"
8
+
9
+ parser.on("-w", "--width N", Integer, "Width (in characters)") do |w|
10
+ options[:width] = w
11
+ end
12
+
13
+ parser.on("-t", "--terminal-percent N", Integer, "Width as percent of terminal size") do |t|
14
+ options[:term_width] = t
15
+ end
16
+
17
+ parser.on("-c COLOR", "--color COLOR", "Color in hex, rgb, or by name [examples: 'red', '255, 255, 255', '#FFFFFF']") do |c|
18
+ if c.include? ","
19
+ options[:color] = c.split(",").map{|x| x.to_i}
20
+ elsif c.include? "#"
21
+ options[:color] = c
22
+ else
23
+ options[:color] = c.to_sym
24
+ end
25
+ end
26
+
27
+ parser.on("-x CHARS", "--custom CHARS", "Custom characters in order of descending relative brightness [example: '@#-.']") do |x|
28
+ options[:chars] = x
29
+ end
30
+
31
+ parser.on("-i", '--invert', "Invert ASCII character order") do |i|
32
+ options[:invert] = true
33
+ end
34
+
35
+ parser.on("-b", "--block", "Print ASCII in block form") do |b|
36
+ options[:block] = true
37
+ end
38
+
39
+ parser.on("-g", "--greyscale", "Print ASCII in greyscale") do |b|
40
+ options[:color] = "greyscale"
41
+ end
42
+
43
+ parser.on("-h", "--help", "Prints this help") do
44
+ puts parser
45
+ exit
46
+ end
47
+
48
+ end.parse!
49
+
50
+ ascii = Image2ASCII.new(ARGV.pop)
51
+ options[:width] = (ascii.winsize * (options[:term_width].to_f / 100)).to_i if options[:term_width]
52
+ ascii.chars = options[:chars] if options[:chars]
53
+ ascii.chars = ascii.chars.reverse if options[:invert]
54
+ ascii.generate({
55
+ :width => options[:width],
56
+ :color => options[:color],
57
+ :block => options[:block]
58
+ })
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+ require 'io/console'
3
+ require 'rmagick'
4
+ require 'rainbow'
5
+ require 'open-uri'
6
+
7
+
8
+ class Image2ASCII
9
+
10
+ attr_reader :winsize
11
+ attr_accessor :chars
12
+
13
+ def initialize(uri)
14
+ @uri = uri
15
+ @winsize = IO.console.winsize[1]
16
+ @chars = %($@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,"^`'.).reverse
17
+ #quantum conversion factor for dealing with quantum depth color values
18
+ @qcf = 1
19
+
20
+ if Magick::MAGICKCORE_QUANTUM_DEPTH > 16
21
+ raise "ImageMagick quantum depth is set to #{Magick::MAGICKCORE_QUANTUM_DEPTH}. It needs to be 16 or less"
22
+ elsif Magick::MAGICKCORE_QUANTUM_DEPTH == 16
23
+ #divides quantum depth color space into useable rgb values
24
+ @qcf = 257
25
+ end
26
+ end
27
+
28
+ def generate(args={})
29
+
30
+ args[:width] ||= @winsize
31
+ args[:color] ||= "full"
32
+ args[:hidden] ||= false
33
+ args[:block] ||= false
34
+ as_string = ""
35
+
36
+ #load the image
37
+ resource = URI.open(@uri)
38
+ img = Magick::ImageList.new
39
+ img.from_blob(resource.read)
40
+
41
+ #correct aspect ratio
42
+ img = img.scale(args[:width] / img.columns.to_f)
43
+ img = img.scale(img.columns, img.rows / 2)
44
+
45
+ img.each_pixel do |pixel, col, row|
46
+
47
+ #get RGB values and brightness of pixels
48
+ r = pixel.red / @qcf
49
+ g = pixel.green / @qcf
50
+ b = pixel.blue / @qcf
51
+ brightness = (0.2126*r + 0.7152*g + 0.0722*b)
52
+ #select from chars that are already pre-ordered in brightness
53
+ char_index = brightness / (255.0 / @chars.length)
54
+ char = @chars[char_index.floor]
55
+ as_string << char
56
+
57
+ chosen_color =
58
+ if args[:color] == "full"
59
+ [r, g, b]
60
+ elsif args[:color] == "greyscale"
61
+ [brightness, brightness, brightness]
62
+ else
63
+ args[:color]
64
+ end
65
+
66
+ if args[:block]
67
+ print Rainbow(" ").background(*chosen_color) if !args[:hidden]
68
+ else
69
+ print Rainbow(char).color(*chosen_color) if !args[:hidden]
70
+ end
71
+
72
+ #add line wrap once desired width is reached
73
+ if (col % (args[:width] - 1) == 0) and (col != 0)
74
+ print "\n" if !args[:hidden]
75
+ as_string << "\n"
76
+ end
77
+
78
+ end
79
+
80
+ return as_string
81
+ end
82
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: image2ascii
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.4
5
+ platform: ruby
6
+ authors:
7
+ - Michael Kofron
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-12-29 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: An RMagick-based ASCII art generator that allows custom characters, colors,
14
+ ands widths. Can also detect terminal window size for responsive output. Use with
15
+ code or with or in the command-line.
16
+ email: kofronmichael@gmail.com
17
+ executables:
18
+ - image2ascii
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - bin/image2ascii
23
+ - lib/image2ascii.rb
24
+ homepage: https://rubygems.org/gems/image2ascii
25
+ licenses:
26
+ - MIT
27
+ metadata:
28
+ source_code_uri: https://github.com/michaelkofron/image2ascii
29
+ documentation_uri: https://github.com/michaelkofron/image2ascii#image2ascii
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubygems_version: 3.2.3
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: Convert images to custom ASCII art with code or from the command-line
49
+ test_files: []