image_paradise 0.1.12

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of image_paradise might be problematic. Click here for more details.

Files changed (115) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +38 -0
  3. data/README.md +179 -0
  4. data/USAGE.md +10 -0
  5. data/bin/black_white +10 -0
  6. data/bin/display_text_from_this_image +7 -0
  7. data/bin/image_paradise +7 -0
  8. data/bin/image_paradise_shell +7 -0
  9. data/bin/image_to_ascii +54 -0
  10. data/bin/image_to_pdf +7 -0
  11. data/bin/make_this_image_transparent +7 -0
  12. data/bin/rotate_left +7 -0
  13. data/bin/rotate_right +7 -0
  14. data/doc/README.gen +162 -0
  15. data/doc/TODO_FOR_THE_GTK_GUI.md +1 -0
  16. data/image_paradise.gemspec +50 -0
  17. data/lib/image_paradise.rb +5 -0
  18. data/lib/image_paradise/base/base.rb +91 -0
  19. data/lib/image_paradise/black_white.rb +89 -0
  20. data/lib/image_paradise/confree_generator/class.rb +614 -0
  21. data/lib/image_paradise/confree_generator/constants.rb +61 -0
  22. data/lib/image_paradise/confree_generator/gui/gtk_confree_generator.rb +752 -0
  23. data/lib/image_paradise/confree_generator/gui/insert_button.rb +78 -0
  24. data/lib/image_paradise/confree_generator/reset.rb +61 -0
  25. data/lib/image_paradise/confree_generator/shared/shared.rb +100 -0
  26. data/lib/image_paradise/constants.rb +43 -0
  27. data/lib/image_paradise/constants/image_file_types.rb +21 -0
  28. data/lib/image_paradise/create_animated_gif.rb +47 -0
  29. data/lib/image_paradise/crop/crop.rb +302 -0
  30. data/lib/image_paradise/gm_support.rb +34 -0
  31. data/lib/image_paradise/graphs.rb +36 -0
  32. data/lib/image_paradise/graphs/accumulator_bar.rb +29 -0
  33. data/lib/image_paradise/graphs/area.rb +64 -0
  34. data/lib/image_paradise/graphs/bar.rb +117 -0
  35. data/lib/image_paradise/graphs/bar_conversion.rb +53 -0
  36. data/lib/image_paradise/graphs/base.rb +1392 -0
  37. data/lib/image_paradise/graphs/bezier.rb +45 -0
  38. data/lib/image_paradise/graphs/bullet.rb +115 -0
  39. data/lib/image_paradise/graphs/deprecated.rb +42 -0
  40. data/lib/image_paradise/graphs/dot.rb +129 -0
  41. data/lib/image_paradise/graphs/line.rb +328 -0
  42. data/lib/image_paradise/graphs/mini/bar.rb +42 -0
  43. data/lib/image_paradise/graphs/mini/legend.rb +109 -0
  44. data/lib/image_paradise/graphs/mini/pie.rb +42 -0
  45. data/lib/image_paradise/graphs/mini/side_bar.rb +41 -0
  46. data/lib/image_paradise/graphs/net.rb +133 -0
  47. data/lib/image_paradise/graphs/photo_bar.rb +106 -0
  48. data/lib/image_paradise/graphs/pie.rb +139 -0
  49. data/lib/image_paradise/graphs/scatter.rb +264 -0
  50. data/lib/image_paradise/graphs/scene.rb +216 -0
  51. data/lib/image_paradise/graphs/side_bar.rb +144 -0
  52. data/lib/image_paradise/graphs/side_stacked_bar.rb +116 -0
  53. data/lib/image_paradise/graphs/spider.rb +163 -0
  54. data/lib/image_paradise/graphs/stacked_area.rb +73 -0
  55. data/lib/image_paradise/graphs/stacked_bar.rb +68 -0
  56. data/lib/image_paradise/graphs/stacked_mixin.rb +30 -0
  57. data/lib/image_paradise/graphs/themes.rb +117 -0
  58. data/lib/image_paradise/graphviz/README.md +2 -0
  59. data/lib/image_paradise/graphviz/generate_graphviz_image.rb +274 -0
  60. data/lib/image_paradise/gui/gtk/control_panel.rb +126 -0
  61. data/lib/image_paradise/identify.rb +145 -0
  62. data/lib/image_paradise/image_border.rb +231 -0
  63. data/lib/image_paradise/image_manipulations.rb +320 -0
  64. data/lib/image_paradise/image_paradise.rb +150 -0
  65. data/lib/image_paradise/image_to_ascii/image_to_ascii.rb +187 -0
  66. data/lib/image_paradise/image_to_pdf/image_to_pdf.rb +99 -0
  67. data/lib/image_paradise/label/README.md +2 -0
  68. data/lib/image_paradise/label/simple_label.rb +206 -0
  69. data/lib/image_paradise/optimizer.rb +483 -0
  70. data/lib/image_paradise/project/project.rb +29 -0
  71. data/lib/image_paradise/random_text_to_image.rb +363 -0
  72. data/lib/image_paradise/requires/common_base_requires.rb +17 -0
  73. data/lib/image_paradise/requires/require_colours.rb +9 -0
  74. data/lib/image_paradise/requires/require_gtk_components.rb +8 -0
  75. data/lib/image_paradise/requires/require_image_to_ascii.rb +7 -0
  76. data/lib/image_paradise/requires/require_the_image_paradise_project.rb +24 -0
  77. data/lib/image_paradise/requires/require_toplevel_methods.rb +21 -0
  78. data/lib/image_paradise/rotate/README.md +2 -0
  79. data/lib/image_paradise/rotate/rotate.rb +98 -0
  80. data/lib/image_paradise/shell/interactive.rb +156 -0
  81. data/lib/image_paradise/svg/README.md +5 -0
  82. data/lib/image_paradise/svg/circle.rb +106 -0
  83. data/lib/image_paradise/svg/feature.rb +48 -0
  84. data/lib/image_paradise/svg/rectangle.rb +154 -0
  85. data/lib/image_paradise/svg/svg.rb +102 -0
  86. data/lib/image_paradise/to_gif.rb +91 -0
  87. data/lib/image_paradise/to_jpg.rb +90 -0
  88. data/lib/image_paradise/toplevel_methods/add_black_border_to_this_image.rb +56 -0
  89. data/lib/image_paradise/toplevel_methods/crop.rb +28 -0
  90. data/lib/image_paradise/toplevel_methods/e.rb +16 -0
  91. data/lib/image_paradise/toplevel_methods/esystem.rb +19 -0
  92. data/lib/image_paradise/toplevel_methods/extract_text_from_this_image.rb +56 -0
  93. data/lib/image_paradise/toplevel_methods/file_related_code.rb +25 -0
  94. data/lib/image_paradise/toplevel_methods/flip_image_left_right.rb +32 -0
  95. data/lib/image_paradise/toplevel_methods/greyscale_this_image.rb +59 -0
  96. data/lib/image_paradise/toplevel_methods/help.rb +30 -0
  97. data/lib/image_paradise/toplevel_methods/make_this_image_transparent.rb +30 -0
  98. data/lib/image_paradise/toplevel_methods/menu.rb +92 -0
  99. data/lib/image_paradise/toplevel_methods/merge_these_images.rb +49 -0
  100. data/lib/image_paradise/toplevel_methods/mirror_image.rb +28 -0
  101. data/lib/image_paradise/toplevel_methods/misc.rb +31 -0
  102. data/lib/image_paradise/toplevel_methods/png_to_svg.rb +34 -0
  103. data/lib/image_paradise/toplevel_methods/roebe.rb +17 -0
  104. data/lib/image_paradise/toplevel_methods/to_png.rb +105 -0
  105. data/lib/image_paradise/toplevel_methods/wallpaper.rb +37 -0
  106. data/lib/image_paradise/toplevel_methods/write_this_text.rb +76 -0
  107. data/lib/image_paradise/version/version.rb +19 -0
  108. data/test/16x16_red_square_image_for_testing.png +0 -0
  109. data/test/testing_confree_generator.rb +8 -0
  110. data/test/testing_crop.rb +19 -0
  111. data/test/testing_image_magick_commands.rb +39 -0
  112. data/test/testing_image_paradise.rb +49 -0
  113. data/test/testing_the_svg_component.html +261 -0
  114. data/test/testing_the_svg_component.rb +106 -0
  115. metadata +217 -0
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ module ImageParadise
6
+
7
+ class ImageToAscii # === ImageParadise::ImageToAscii
8
+
9
+ require 'uri'
10
+ require 'open-uri'
11
+
12
+ begin
13
+ require 'rmagick' unless Object.const_defined? :Magick
14
+ rescue LoadError; end
15
+
16
+ # ========================================================================= #
17
+ # === HTML
18
+ # ========================================================================= #
19
+ HTML = 'html'
20
+
21
+ # ========================================================================= #
22
+ # === BR
23
+ # ========================================================================= #
24
+ BR = '<br/>'
25
+
26
+ attr_writer :image_chars
27
+
28
+ # ========================================================================= #
29
+ # === initialize
30
+ # ========================================================================= #
31
+ def initialize(
32
+ path_to_file,
33
+ run_already = true
34
+ )
35
+ reset
36
+ # open-uri open will fallback to IO open.
37
+ path_to_file = [path_to_file] if path_to_file.is_a? String
38
+ if path_to_file
39
+ path_to_file.each {|path|
40
+ open(path) { |file| @data = file.read }
41
+ }
42
+ end
43
+ self
44
+ end
45
+
46
+ # ========================================================================= #
47
+ # === result?
48
+ # ========================================================================= #
49
+ def result?
50
+ @result
51
+ end; alias result result? # === result
52
+
53
+ # ========================================================================= #
54
+ # === ImageToAscii[]
55
+ #
56
+ # Usage example:
57
+ #
58
+ # require 'image_to_ascii'
59
+ # ImageToAscii['screenshot_2014.png']
60
+ #
61
+ # ========================================================================= #
62
+ def self.[](i)
63
+ _ = ImageToAscii.new(i)
64
+ _.to_ascii
65
+ end
66
+
67
+ # ========================================================================= #
68
+ # === reset
69
+ # ========================================================================= #
70
+ def reset
71
+ @data = nil
72
+ end
73
+
74
+ # ========================================================================= #
75
+ # === to_ascii
76
+ # ========================================================================= #
77
+ def to_ascii(options = {})
78
+ options = {
79
+ width: 100, color: false, format: 'text'
80
+ }.merge(options)
81
+
82
+ img = Magick::Image.from_blob(@data).first
83
+
84
+ width = options[:width]
85
+ scale = (width.to_f / img.columns)
86
+ height = ((img.rows * scale) / 2).to_i
87
+
88
+ img.resize!(width, height)
89
+ # ======================================================================= #
90
+ # Check whether we wish to add colours.
91
+ # ======================================================================= #
92
+ color_image = img.dup if options[:color]
93
+ img = img.quantize(
94
+ image_chars.length, Magick::GRAYColorspace
95
+ ).normalize
96
+ quantum_calc = Magick::QuantumRange / Magick::QuantumPixel.to_i
97
+ image_chars.map! {|char|
98
+ char == ' ' ? '&nbsp;' : char
99
+ } if options[:format] == HTML
100
+
101
+ border = "+#{'-' * width}+#{line_break(options[:format])}"
102
+ border = html_char(border) if options[:format] == HTML
103
+
104
+ output = border.dup
105
+
106
+ img.view(0, 0, width, height) { |view|
107
+ height.times { |i|
108
+ output << '|'
109
+ width.times { |j|
110
+ character = image_chars[view[i][j].red/quantum_calc]
111
+ if options[:format] == HTML
112
+ if options[:color]
113
+ pix = color_image.pixel_color(j,i)
114
+ color_string = "color: #{pix.to_color( Magick::AllCompliance,false,8, true)};"
115
+ else
116
+ color_string = ''
117
+ end
118
+ character = html_char(character, color_string)
119
+ else
120
+ # text-format
121
+ if options[:color]
122
+ pix = color_image.pixel_color(j,i)
123
+ character = character.color(
124
+ unified_rgb_value(pix.red),
125
+ unified_rgb_value(pix.green),
126
+ unified_rgb_value(pix.blue)
127
+ )
128
+ end
129
+ end
130
+ output << character
131
+ }
132
+ output << "|#{line_break(options[:format])}"
133
+ }
134
+ }
135
+ @result = output + border
136
+ return @result
137
+ end
138
+
139
+ # ========================================================================= #
140
+ # === image_chars
141
+ # ========================================================================= #
142
+ def image_chars
143
+ @image_chars ||= ' .~:+=o*x^%#@$MW'.chars.to_a
144
+ end
145
+
146
+ # ========================================================================= #
147
+ # === inspect
148
+ # ========================================================================= #
149
+ def inspect
150
+ "#<#{self.class.to_s}>"
151
+ end
152
+
153
+ # ========================================================================= #
154
+ # === line_break
155
+ # ========================================================================= #
156
+ def line_break(format)
157
+ (format == 'text') ? "\n" : BR
158
+ end; private :line_break
159
+
160
+ # ========================================================================= #
161
+ # === unified_rgb_value
162
+ # ========================================================================= #
163
+ def unified_rgb_value(number)
164
+ (Magick::QuantumDepth == 16) ? (number / 256) : number
165
+ end; private :unified_rgb_value
166
+
167
+ # ========================================================================= #
168
+ # === html_char
169
+ # ========================================================================= #
170
+ def html_char(char, additional_style = '')
171
+ "<span style=\"font-family: 'Lucida Console', Monaco, monospace; #{additional_style}\">#{char}</span>"
172
+ end; private :html_char
173
+
174
+ end
175
+
176
+ # =========================================================================== #
177
+ # === ImageParadise.image_to_ascii
178
+ # =========================================================================== #
179
+ def self.image_to_ascii(i = ARGV)
180
+ ImageParadise::ImageToAscii.new(i)
181
+ end
182
+
183
+ end
184
+
185
+ if __FILE__ == $PROGRAM_NAME
186
+ ImageParadise::ImageToAscii.new(ARGV)
187
+ end
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === ImageParadise::ImageToPdf
6
+ #
7
+ # This class will simply convert an image-file into a .pdf "file".
8
+ #
9
+ # Usage example:
10
+ #
11
+ # ImageParadise::ImageToPdf.new(ARGV)
12
+ #
13
+ # =========================================================================== #
14
+ # require 'image_paradise/image_to_pdf/image_to_pdf.rb'
15
+ # =========================================================================== #
16
+ require 'image_paradise/base/base.rb'
17
+
18
+ module ImageParadise
19
+
20
+ class ImageToPdf < Base # === ImageParadise::ImageToPdf
21
+
22
+ # ========================================================================= #
23
+ # === initialize
24
+ # ========================================================================= #
25
+ def initialize(
26
+ commandline_arguments = nil,
27
+ run_already = true
28
+ )
29
+ reset
30
+ set_commandline_arguments(
31
+ commandline_arguments
32
+ )
33
+ run if run_already
34
+ end
35
+
36
+ # ========================================================================= #
37
+ # === reset (reset tag)
38
+ # ========================================================================= #
39
+ def reset
40
+ super()
41
+ end
42
+
43
+ # ========================================================================= #
44
+ # === set_commandline_arguments
45
+ # ========================================================================= #
46
+ def set_commandline_arguments(i = '')
47
+ i = [i].flatten.compact
48
+ @commandline_arguments = i
49
+ end
50
+
51
+ # ========================================================================= #
52
+ # === first_argument?
53
+ # ========================================================================= #
54
+ def first_argument?
55
+ @commandline_arguments.first
56
+ end; alias first? first_argument? # === first?
57
+ alias input? first_argument? # === input?
58
+
59
+ # ========================================================================= #
60
+ # === output?
61
+ # ========================================================================= #
62
+ def output?
63
+ input?.gsub(/#{extname?}/,'')+'.pdf'
64
+ end
65
+
66
+ # ========================================================================= #
67
+ # === commandline_arguments?
68
+ # ========================================================================= #
69
+ def commandline_arguments?
70
+ @commandline_arguments
71
+ end
72
+
73
+ # ========================================================================= #
74
+ # === extname?
75
+ # ========================================================================= #
76
+ def extname?
77
+ File.extname(input?)
78
+ end
79
+
80
+ # ========================================================================= #
81
+ # === run (run tag)
82
+ # ========================================================================= #
83
+ def run
84
+ _ = "convert #{input?} #{output?}"
85
+ esystem _
86
+ end
87
+
88
+ # ========================================================================= #
89
+ # === ImageParadise::ImageToPdf[]
90
+ # ========================================================================= #
91
+ def self.[](i = '')
92
+ new(i)
93
+ end
94
+
95
+ end; end
96
+
97
+ if __FILE__ == $PROGRAM_NAME
98
+ ImageParadise::ImageToPdf.new(ARGV)
99
+ end # image_to_pdf
@@ -0,0 +1,2 @@
1
+ This directory will have label-specific code. This allows you
2
+ to automatically create certain text in imagemagic.
@@ -0,0 +1,206 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === ImageParadise::SimpleLabel
6
+ #
7
+ # This class will create a simple label.
8
+ # =========================================================================== #
9
+ require 'image_paradise/base/base.rb'
10
+
11
+ module ImageParadise
12
+
13
+ class SimpleLabel < Base # === ImageParadise::SimpleLabel
14
+
15
+ begin
16
+ require 'open_in_browser'
17
+ rescue LoadError; end
18
+
19
+ # ========================================================================= #
20
+ # === DO_OPEN_IN_BROWSER
21
+ # ========================================================================= #
22
+ DO_OPEN_IN_BROWSER = true
23
+
24
+ # ========================================================================= #
25
+ # === DEFAULT_FONT_TO_USE
26
+ # ========================================================================= #
27
+ DEFAULT_FONT_TO_USE = 'Helvetica'
28
+
29
+ # ========================================================================= #
30
+ # === DEFAULT_IMAGE_FORMAT
31
+ # ========================================================================= #
32
+ DEFAULT_IMAGE_FORMAT = 'PNG'
33
+
34
+ # ========================================================================= #
35
+ # === REGEX_FOR_SIZE
36
+ # ========================================================================= #
37
+ REGEX_FOR_SIZE = /(\d+x\d+)/
38
+
39
+ # ========================================================================= #
40
+ # === initialize
41
+ # ========================================================================= #
42
+ def initialize(
43
+ i = ARGV,
44
+ run_already = true
45
+ )
46
+ reset
47
+ set_label(i)
48
+ run if run_already
49
+ end
50
+
51
+ # ========================================================================= #
52
+ # === set_label
53
+ # ========================================================================= #
54
+ def set_label(i)
55
+ if i.is_a? Array
56
+ i = i.join(' ').strip
57
+ end
58
+ # ======================================================================= #
59
+ # Check whether the label includes a Dimension. This may be a conflict
60
+ # if the user REALLY wants to use some integer value, as part of the
61
+ # given label - but aside from this, I think in most other cases,
62
+ # this is a good default.
63
+ # ======================================================================= #
64
+ if i =~ REGEX_FOR_SIZE
65
+ size_dimension = $1.to_s.dup
66
+ set_size(size_dimension)
67
+ i.sub!(/#{size_dimension}/,'')
68
+ end
69
+ @label = i
70
+ end
71
+
72
+ # ========================================================================= #
73
+ # === reset
74
+ # ========================================================================= #
75
+ def reset
76
+ super()
77
+ @_ = ''.dup
78
+ @label = ''.dup
79
+ @background = 'lightblue'
80
+ @fill = 'blue'
81
+ @font = DEFAULT_FONT_TO_USE
82
+ @pointsize = '96'
83
+ @output_file = 'label.'+DEFAULT_IMAGE_FORMAT.downcase
84
+ set_size '250x75'
85
+ end
86
+
87
+ # ========================================================================= #
88
+ # === set_size
89
+ # ========================================================================= #
90
+ def set_size(i = '250x75')
91
+ @size = i.to_s
92
+ end
93
+
94
+ # ========================================================================= #
95
+ # === build_up_main_command
96
+ # ========================================================================= #
97
+ def build_up_main_command
98
+ @_ = 'convert'
99
+ add_default_background
100
+ add_default_fill
101
+ add_default_font
102
+ add_default_gravity
103
+ add_size
104
+ add_label
105
+ # add_default_pointsize # Do not add this option if you also added the default size.
106
+ add_output_file
107
+ end
108
+
109
+ # ========================================================================= #
110
+ # === add_size
111
+ # ========================================================================= #
112
+ def add_size
113
+ @_ << ' -size '+@size
114
+ end
115
+
116
+ # ========================================================================= #
117
+ # === add_default_background
118
+ # ========================================================================= #
119
+ def add_default_background
120
+ @_ << ' -background '+@background
121
+ end
122
+
123
+ # ========================================================================= #
124
+ # === add_default_font
125
+ # ========================================================================= #
126
+ def add_default_font
127
+ @_ << ' -font '+@font
128
+ end
129
+
130
+ # ========================================================================= #
131
+ # === add_label
132
+ # ========================================================================= #
133
+ def add_label
134
+ _ = @label
135
+ if _.include? ' '
136
+ _ = '"'+_+'"'
137
+ end
138
+ @_ << ' label:'+_
139
+ end
140
+
141
+ # ========================================================================= #
142
+ # === add_default_gravity
143
+ # ========================================================================= #
144
+ def add_default_gravity
145
+ @_ << ' -gravity center'
146
+ end
147
+
148
+ # ========================================================================= #
149
+ # === output_then_run_the_main_command
150
+ # ========================================================================= #
151
+ def output_then_run_the_main_command
152
+ esystem @_
153
+ end
154
+
155
+ # ========================================================================= #
156
+ # === add_output_file
157
+ # ========================================================================= #
158
+ def add_output_file
159
+ @_ << ' '+@output_file
160
+ end
161
+
162
+ # ========================================================================= #
163
+ # === output_file?
164
+ # ========================================================================= #
165
+ def output_file?
166
+ @output_file
167
+ end
168
+
169
+ # ========================================================================= #
170
+ # === add_default_pointsize
171
+ # ========================================================================= #
172
+ def add_default_pointsize
173
+ @_ << ' -pointsize '+@pointsize
174
+ end
175
+
176
+ # ========================================================================= #
177
+ # === add_default_fill
178
+ # ========================================================================= #
179
+ def add_default_fill
180
+ @_ << ' -fill '+@fill
181
+ end
182
+
183
+ # ========================================================================= #
184
+ # === consider_opening_in_the_browser
185
+ # ========================================================================= #
186
+ def consider_opening_in_the_browser
187
+ if DO_OPEN_IN_BROWSER
188
+ OpenInBrowser[output_file?]
189
+ end
190
+ end
191
+
192
+ # ========================================================================= #
193
+ # === run
194
+ # ========================================================================= #
195
+ def run
196
+ build_up_main_command
197
+ output_then_run_the_main_command
198
+ consider_opening_in_the_browser
199
+ end
200
+
201
+ end; end
202
+
203
+ if __FILE__ == $PROGRAM_NAME
204
+ ImageParadise::SimpleLabel.new(ARGV)
205
+ end # simple_label "Tomorrow is another day."
206
+ # simple_label "Tomorrow is another day. 500x250"