image_paradise 0.1.12

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.

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,320 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'image_paradise/image_manipulations.rb'
6
+ # =========================================================================== #
7
+ require 'image_paradise/gm_support.rb'
8
+
9
+ module ImageParadise
10
+
11
+ class ImageManipulations
12
+
13
+ # ========================================================================= #
14
+ # === initialize
15
+ #
16
+ # The first argument to this method should be the path to the file
17
+ # that we want to manipulate.
18
+ # ========================================================================= #
19
+ def initialize(i)
20
+ reset
21
+ set_file(i)
22
+ end
23
+
24
+ # ========================================================================= #
25
+ # === set_file
26
+ # ========================================================================= #
27
+ def set_file(i)
28
+ @file = i
29
+ end
30
+
31
+ # ========================================================================= #
32
+ # === reset
33
+ # ========================================================================= #
34
+ def reset
35
+ @filename_changed = false
36
+ @display_sys_command = false
37
+ end
38
+
39
+ # ========================================================================= #
40
+ # === file?
41
+ # ========================================================================= #
42
+ def file?
43
+ @file
44
+ end; alias file file? # === file
45
+
46
+ # ========================================================================= #
47
+ # === identify
48
+ #
49
+ # Runs ImageMagick's 'identify'.
50
+ #
51
+ # See http://www.imagemagick.org/script/identify.php
52
+ # ========================================================================= #
53
+ def identify(i = {})
54
+ tokens = ['identify']
55
+ tokens << expand_arguments_to_key_value_pairs(i) if i
56
+ tokens << " '#{@file}#{"[#{i[:layer].to_s}]" if i[:layer]}'"
57
+ tokens = convert_to_command(tokens)
58
+ output = run_command(tokens).first
59
+ output
60
+ end
61
+
62
+ # ========================================================================= #
63
+ # === dimensions
64
+ #
65
+ # Return the x and y dimensions of an image, as a Hash.
66
+ # ========================================================================= #
67
+ def dimensions
68
+ dimensions = identify( # Tap into Imagemagick's identify binary.
69
+ :layer => 0, :format => "%wx%h"
70
+ ).chomp.split('x')
71
+ hash = {
72
+ x: dimensions[0].to_i,
73
+ y: dimensions[1].to_i
74
+ }
75
+ return hash
76
+ end; alias width_and_height dimensions # === width_and_height
77
+
78
+ # ========================================================================= #
79
+ # === width
80
+ #
81
+ # Returns the x dimension of an image as an integer
82
+ # ========================================================================= #
83
+ def width
84
+ dimensions[:x]
85
+ end
86
+
87
+ # ========================================================================= #
88
+ # === height
89
+ #
90
+ # Returns the y dimension of an image as an integer
91
+ # ========================================================================= #
92
+ def height
93
+ dimensions[:y]
94
+ end
95
+
96
+ # ========================================================================= #
97
+ # === montage
98
+ #
99
+ # Runs ImageMagick's 'montage'.
100
+ #
101
+ # See http://www.imagemagick.org/script/montage.php
102
+ # ========================================================================= #
103
+ def montage(sources, i = {})
104
+ tokens = ['montage']
105
+ tokens << expand_arguments_to_key_value_pairs(i) if i
106
+ sources.each {|source| tokens << " '#{source}'" }
107
+ tokens << " '#{@file}'"
108
+ tokens = convert_to_command(tokens)
109
+ success = run_command(tokens)[1]
110
+ success
111
+ end
112
+
113
+ # ========================================================================= #
114
+ # === filename_changed?
115
+ # ========================================================================= #
116
+ def filename_changed?
117
+ @filename_changed
118
+ end
119
+
120
+ # ========================================================================= #
121
+ # === do_manipulate
122
+ #
123
+ # Runs ImageMagick's 'mogrify' command. The first argument to this
124
+ # method is an (optional) Hash.
125
+ #
126
+ # See http://www.imagemagick.org/script/mogrify.php
127
+ #
128
+ # Invocation example:
129
+ # image.do_manipulate(scale: '80%') # => true
130
+ # ========================================================================= #
131
+ def do_manipulate(i = {})
132
+ tokens = ['mogrify']
133
+ tokens << expand_arguments_to_key_value_pairs(i) if i
134
+ tokens << " '#{@file}#{"[#{i[:layer].to_s}]" if i[:layer]}'"
135
+ tokens << " -annotate #{i[:annotate].to_s}" if i[:annotate]
136
+ tokens = convert_to_command(tokens)
137
+ success = run_command(tokens)[1]
138
+ replace_file(i[:format].to_s.downcase, i[:layer]) if success && i[:format]
139
+ success
140
+ end; alias manipulate! do_manipulate # === manipulate!
141
+
142
+ # ========================================================================= #
143
+ # === shrink
144
+ #
145
+ # Shrinks the given image at hand. Be careful with this method - it
146
+ # will instantly shrink the given file, without keeping a backup. So
147
+ # if you want to keep a backup, you have to copy the image file on
148
+ # your own BEFORE invoking this method here.
149
+ # ========================================================================= #
150
+ def shrink(n_percent = '80%')
151
+ unless n_percent.is_a? String
152
+ n_percent = n_percent.to_s
153
+ end
154
+ n_percent << '%' unless n_percent.end_with? '%'
155
+ do_manipulate(scale: n_percent)
156
+ end
157
+
158
+ # ========================================================================= #
159
+ # === replace_file
160
+ #
161
+ # Replaces the old file (with the old file format) with the newly
162
+ # generated one.
163
+ #
164
+ # The old file will be deleted and $file will be reset.
165
+ #
166
+ # If ImageMagick generated more than one file, $file will have a "*",
167
+ # so that all files generated will be manipulated in the following
168
+ # steps.
169
+ # ========================================================================= #
170
+ def replace_file(format, layer)
171
+ return if File.extname(@file) == format
172
+
173
+ layer ||= 0
174
+ layer = layer.split(',').first if layer.is_a? String
175
+
176
+ File.delete(@file)
177
+
178
+ @filename_changed = true
179
+
180
+ path = File.join File.dirname(@file), File.basename(@file, File.extname(@file))
181
+ new_file = find_file(path, format, layer)
182
+
183
+ @file = new_file.call(path, format, '*') unless new_file.nil?
184
+ end
185
+
186
+ # ========================================================================= #
187
+ # === find_file
188
+ # ========================================================================= #
189
+ def find_file(path, format, layer)
190
+ possible_paths = [
191
+ Proc.new { |inner_path, inner_format, _inner_layer|
192
+ "#{inner_path}.#{inner_format}"
193
+ },
194
+ Proc.new { |inner_path, inner_format, inner_layer|
195
+ "#{inner_path}-#{inner_layer}.#{format}"
196
+ },
197
+ Proc.new { |inner_path, inner_format, inner_layer|
198
+ "#{inner_path}.#{inner_format}.#{inner_layer}"
199
+ }
200
+ ]
201
+ possible_paths.find { |possible_path|
202
+ File.exist?(possible_path.call(path, format, layer))
203
+ }
204
+ end
205
+
206
+ # ========================================================================= #
207
+ # === convert (convert tag)
208
+ #
209
+ # Runs ImageMagick's 'convert'.
210
+ #
211
+ # The second argument to this method has to be a Hash, if it is given.
212
+ #
213
+ # See http://www.imagemagick.org/script/convert.php
214
+ # ========================================================================= #
215
+ def convert(output, i = {})
216
+ tokens = ['convert']
217
+ tokens << expand_arguments_to_key_value_pairs(i) if i
218
+ tokens << " '#{@file}#{"[#{i[:layer].to_s}]" if i.has_key?(:layer)}'"
219
+ tokens << " -annotate #{i[:annotate].to_s}" if i.has_key?(:annotate)
220
+ tokens << " #{output}"
221
+ tokens = convert_to_command(tokens)
222
+ success = run_command(tokens)[1]
223
+ success
224
+ end
225
+
226
+ # ========================================================================= #
227
+ # === convert_to_command
228
+ #
229
+ # This method adds a proper prefix, which is defined in the file
230
+ # gm_support.rb. Then it joins the commands of the Array at hand.
231
+ # ========================================================================= #
232
+ def convert_to_command(tokens)
233
+ # ======================================================================= #
234
+ # Pass into the method prefix() next.
235
+ # ======================================================================= #
236
+ tokens[0] = prefix(tokens.first) if respond_to? :prefix
237
+ tokens.flatten.join
238
+ end
239
+
240
+ # ========================================================================= #
241
+ # === expand_arguments_to_key_value_pairs
242
+ #
243
+ # Convert the entries into a format that ImageMagick understands.
244
+ # ========================================================================= #
245
+ def expand_arguments_to_key_value_pairs(i)
246
+ special_arguments = [ :layer, :annotate ]
247
+ # ======================================================================= #
248
+ # First, reject keys that are not :layer or :annotate.
249
+ # ======================================================================= #
250
+ i.reject {|key, _value| special_arguments.include?(key) }.map {|key, value|
251
+ " -#{key} '#{value}'"
252
+ }
253
+ end; alias convert_arguments expand_arguments_to_key_value_pairs # === convert_arguments
254
+
255
+ # ========================================================================= #
256
+ # === run_command
257
+ #
258
+ # Use IO.popen to run the passed command at hand.
259
+ #
260
+ # The method returns an Array, holding the output, and the success
261
+ # status.
262
+ # ========================================================================= #
263
+ def run_command(i)
264
+ i = i.to_s
265
+ if @display_sys_command
266
+ # ===================================================================== #
267
+ # Show the command if the ivar above is true.
268
+ # ===================================================================== #
269
+ e i
270
+ end
271
+ output = IO.popen(i) {|dataset| dataset.read }
272
+ success = $?.exitstatus == 0 ? true : false
273
+ [output, success]
274
+ end
275
+
276
+ end
277
+
278
+ # =========================================================================== #
279
+ # === ImageParadise.identify
280
+ # =========================================================================== #
281
+ def self.identify(this_image, hash_arguments = {})
282
+ ImageParadise::ImageManipulations.new(this_image).identify(hash_arguments)
283
+ end
284
+
285
+ # =========================================================================== #
286
+ # === ImageParadise.convert
287
+ # =========================================================================== #
288
+ def self.convert(this_image, hash_arguments = {})
289
+ ImageParadise::ImageManipulations.new(this_image).convert(hash_arguments)
290
+ end
291
+
292
+ # =========================================================================== #
293
+ # === ImageParadise.dimensions
294
+ # =========================================================================== #
295
+ def self.dimensions(this_image, hash_arguments = {})
296
+ ImageParadise::ImageManipulations.new(this_image).dimensions(hash_arguments)
297
+ end
298
+
299
+ # =========================================================================== #
300
+ # === ImageParadise.montage
301
+ # =========================================================================== #
302
+ def self.montage(this_image, hash_arguments = {})
303
+ ImageParadise::ImageManipulations.new(this_image).montage(hash_arguments)
304
+ end
305
+
306
+ # =========================================================================== #
307
+ # === ImageParadise.do_manipulate
308
+ # =========================================================================== #
309
+ def self.do_manipulate(this_image, hash_arguments = {})
310
+ ImageParadise::ImageManipulations.new(this_image).do_manipulate(hash_arguments)
311
+ end
312
+
313
+ # =========================================================================== #
314
+ # === ImageParadise.shrink
315
+ # =========================================================================== #
316
+ def self.shrink(this_image, hash_arguments = {})
317
+ ImageParadise::ImageManipulations.new(this_image).shrink(hash_arguments)
318
+ end
319
+
320
+ end
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === ImageParadise::ImageParadise
6
+ #
7
+ # This project can be used to do fancy image manipulations from the
8
+ # commandline, including the de-novo creation of new images.
9
+ #
10
+ # Usage example:
11
+ # ImageParadise::ImageParadise.new
12
+ # =========================================================================== #
13
+ # require 'image_paradise'
14
+ # =========================================================================== #
15
+ require 'image_paradise/requires/common_base_requires.rb'
16
+ require 'image_paradise/toplevel_methods/esystem.rb'
17
+ require 'image_paradise/toplevel_methods/crop.rb'
18
+ require 'image_paradise/toplevel_methods/png_to_svg.rb'
19
+ require 'image_paradise/constants.rb'
20
+ require 'image_paradise/identify.rb'
21
+ require 'image_paradise/create_animated_gif.rb'
22
+ require 'image_paradise/graphs.rb'
23
+ require 'image_paradise/confree_generator/class.rb'
24
+ require 'image_paradise/optimizer.rb'
25
+
26
+ module ImageParadise
27
+
28
+ class ImageParadise # === ImageParadise::ImageParadise
29
+
30
+ # ========================================================================= #
31
+ # === initialize
32
+ #
33
+ # First argument is the filename that we wish to use.
34
+ # ========================================================================= #
35
+ def initialize(
36
+ i = nil,
37
+ run_already = true
38
+ )
39
+ reset
40
+ set_filename(i)
41
+ if run_already.to_s.include? 'dont'
42
+ run_already = false
43
+ end
44
+ run if run_already
45
+ end
46
+
47
+ # ========================================================================= #
48
+ # === reset (reset tag)
49
+ # ========================================================================= #
50
+ def reset
51
+ end
52
+
53
+ # ========================================================================= #
54
+ # === set_filename
55
+ #
56
+ # This will be the input filename.
57
+ # ========================================================================= #
58
+ def set_filename(i = '')
59
+ i = i.first if i.is_a? Array
60
+ i = i.to_s.dup if i
61
+ @filename = i
62
+ end
63
+
64
+ # ========================================================================= #
65
+ # === filename?
66
+ # ========================================================================= #
67
+ def filename?
68
+ @filename
69
+ end; alias input? filename? # === input?
70
+
71
+ # ========================================================================= #
72
+ # === ImageParadise.font_tiled
73
+ # ========================================================================= #
74
+ def self.font_tiled(i = DEFAULT_TEXT)
75
+ i = DEFAULT_TEXT if i.nil?
76
+ width_and_height = '500x250'
77
+ _ = CONVERT+" -size "+width_and_height+" xc:lightblue -font "+
78
+ DEFAULT_FONT+" -pointsize 68
79
+ -tile pattern:checkerboard -annotate +28+68 '"+i+"'
80
+ font_tile.jpg"
81
+ esys _
82
+ end
83
+
84
+ # ========================================================================= #
85
+ # === ImageParadise.esys
86
+ # ========================================================================= #
87
+ def self.esys(i)
88
+ i.delete!(N)
89
+ esystem(i)
90
+ end
91
+
92
+ # ========================================================================= #
93
+ # === esys
94
+ # ========================================================================= #
95
+ def esys(i)
96
+ ImageParadise.esys(i)
97
+ end
98
+
99
+ # ========================================================================= #
100
+ # === colourize
101
+ #
102
+ # Input should be R,G,B values.
103
+ # ========================================================================= #
104
+ def colourize(rgb_values = '2,15,75')
105
+ case rgb_values
106
+ when :randomize, :random
107
+ rgb_values = (rand(255)+1).to_s+','+(rand(255)+1).to_s+','+(rand(255)+1).to_s
108
+ end
109
+ _ = CONVERT+' -colorize '+rgb_values+' '+input?+' '+output?
110
+ ImageParadise.esys _
111
+ end
112
+
113
+ # ========================================================================= #
114
+ # === output
115
+ # ========================================================================= #
116
+ def output?
117
+ 'output.png'
118
+ end
119
+
120
+ # ========================================================================= #
121
+ # === ImageParadise.resize
122
+ #
123
+ # This is equivalent to:
124
+ # convert terminal.gif -resize 64x64 resize_terminal.gif
125
+ # ========================================================================= #
126
+ def self.resize(resize_how = '-resize 64x64')
127
+ _ = CONVERT+' '+resize_how+' '+input_output?
128
+ end
129
+
130
+ # ========================================================================= #
131
+ # === input_output?
132
+ # ========================================================================= #
133
+ def input_output?
134
+ input?+' '+output?
135
+ end
136
+
137
+ # ========================================================================= #
138
+ # === run
139
+ # ========================================================================= #
140
+ def run # (run tag)
141
+ end
142
+
143
+ end; end
144
+
145
+ if __FILE__ == $PROGRAM_NAME
146
+ # _ = ImageParadise.new(ARGV, :dont_run_yet)
147
+ # _.run
148
+ ImageParadise::ImageParadise.crop('rose.jpg')
149
+ end # rimage
150
+ # require 'image_paradise'; ImageParadise.new('foo.jpg').colourize :random