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,102 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # Shared coded for the SVG component of the ImageParadise project
6
+ # be stored here.
7
+ # =========================================================================== #
8
+ # require 'image_paradise/svg/svg.rb'
9
+ # =========================================================================== #
10
+ module ImageParadise
11
+
12
+ module Svg # === ImageParadise::Svg
13
+
14
+ require 'image_paradise/project/project.rb'
15
+ require 'image_paradise/svg/circle.rb'
16
+ require 'image_paradise/svg/feature.rb'
17
+ require 'image_paradise/svg/rectangle.rb'
18
+
19
+ # ========================================================================= #
20
+ # === N
21
+ # ========================================================================= #
22
+ N = "\n"
23
+
24
+ # ========================================================================= #
25
+ # === @_
26
+ #
27
+ # This is a variable that will keep the big String.
28
+ # ========================================================================= #
29
+ @_ = ''.dup
30
+
31
+ # ========================================================================= #
32
+ # === Svg.reset
33
+ # ========================================================================= #
34
+ def self.reset
35
+ @_ = ''
36
+ end
37
+
38
+ # ========================================================================= #
39
+ # === Svg.strip
40
+ # ========================================================================= #
41
+ def self.strip(i)
42
+ return i.squeeze(' ')
43
+ end
44
+
45
+ # ========================================================================= #
46
+ # === Svg.string?
47
+ # ========================================================================= #
48
+ def self.string?
49
+ @_
50
+ end; self.instance_eval { alias [] string? } # === Svg[]
51
+
52
+ # ========================================================================= #
53
+ # === Svg.add
54
+ #
55
+ # Simply append onto @_.
56
+ # ========================================================================= #
57
+ def self.add(i = '')
58
+ i = i.to_s.dup
59
+ @_ << i
60
+ end
61
+
62
+ # ========================================================================= #
63
+ # === Svg.close_svg
64
+ #
65
+ # Simply close the <svg> tag here
66
+ # ========================================================================= #
67
+ def self.close_svg
68
+ return '</svg>'+N
69
+ end
70
+
71
+ # ========================================================================= #
72
+ # === Svg.chart_directory
73
+ #
74
+ # Give us the path towards the svg_-charts subdirectory.
75
+ # ========================================================================= #
76
+ def self.chart_directory
77
+ ::ImageParadise.project_base_dir?+'charts/'
78
+ end
79
+
80
+ # ========================================================================= #
81
+ # === Svg.load_chart_module
82
+ #
83
+ # This method will load the individual .rb files from the chart/
84
+ # subdirectory. Currently this is not in use though - perhaps one
85
+ # day when I get to use the chart-svg subsection.
86
+ # ========================================================================= #
87
+ def self.load_chart_module
88
+ these_files = Svg.chart_directory+'*.rb'
89
+ Dir[these_files].each {|file|
90
+ file = 'image_paradise/svg/charts/'+File.basename(file)
91
+ require file # And require it.
92
+ }
93
+ end; load_chart_module # And call it at once.
94
+
95
+ # ========================================================================= #
96
+ # === Svg.add
97
+ # ========================================================================= #
98
+ def self.add_linebreak
99
+ add "<br>#{N}"
100
+ end
101
+
102
+ end; end
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === ImageParadise::ToGif
6
+ #
7
+ # This class will simply convert an image file to .gif.
8
+ #
9
+ # Usage example:
10
+ #
11
+ # ImageParadise::ToGif.new(ARGV)
12
+ #
13
+ # =========================================================================== #
14
+ # require 'image_paradise/to_gif.rb'
15
+ # =========================================================================== #
16
+ require 'image_paradise/base/base.rb'
17
+
18
+ module ImageParadise
19
+
20
+ class ToGif < ::ImageParadise::Base # === ImageParadise::ToGif
21
+
22
+ # ========================================================================= #
23
+ # === initialize
24
+ # ========================================================================= #
25
+ def initialize(
26
+ i = nil,
27
+ run_already = true
28
+ )
29
+ reset
30
+ set_input(i)
31
+ run if run_already
32
+ end
33
+
34
+ # ========================================================================= #
35
+ # === reset (reset tag)
36
+ # ========================================================================= #
37
+ def reset
38
+ end
39
+
40
+ # ========================================================================= #
41
+ # === set_input
42
+ # ========================================================================= #
43
+ def set_input(i = '')
44
+ i = i.first if i.is_a? Array
45
+ i = i.to_s.dup if i
46
+ @input = i
47
+ end
48
+
49
+ # ========================================================================= #
50
+ # === run_everything
51
+ #
52
+ # This method contains the main logic of the file.
53
+ # ========================================================================= #
54
+ def run_everything
55
+ opn; e 'Next converting '+simp(input?)+' to '+sfile(store_where?)
56
+ _ = 'convert '+input?+' '+store_where?
57
+ esystem _
58
+ if File.exist? store_where?
59
+ opn; e 'We will next try to optimize '+sfile(store_where?)
60
+ opn; e 'The old file size is: '+sfancy(File.size(store_where?).to_s)
61
+ ImageParadise::Optimizer[store_where?]
62
+ opn; e 'The new file size is: '+sfancy(File.size(store_where?).to_s)
63
+ end
64
+ end
65
+
66
+ # ========================================================================= #
67
+ # === input?
68
+ # ========================================================================= #
69
+ def input?
70
+ @input
71
+ end
72
+
73
+ # ========================================================================= #
74
+ # === store_where?
75
+ # ========================================================================= #
76
+ def store_where?
77
+ input?.gsub(File.extname(input?),'')+'.gif'
78
+ end
79
+
80
+ # ========================================================================= #
81
+ # === run
82
+ # ========================================================================= #
83
+ def run # (run tag)
84
+ run_everything
85
+ end
86
+
87
+ end; end
88
+
89
+ if __FILE__ == $PROGRAM_NAME
90
+ ImageParadise::ToGif.new(ARGV)
91
+ end # to_gif
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === ImageParadise::ToJpg
6
+ #
7
+ # This class will simply convert an image file to .jpg format.
8
+ #
9
+ # Usage example:
10
+ # ImageParadise::ToJpg.new
11
+ # =========================================================================== #
12
+ # require 'image_paradise/to_jpg.rb'
13
+ # =========================================================================== #
14
+ require 'image_paradise/base/base.rb'
15
+
16
+ module ImageParadise
17
+
18
+ class ToJpg < ::ImageParadise::Base # === ImageParadise::ToJpg.new
19
+
20
+ # ========================================================================= #
21
+ # === initialize
22
+ # ========================================================================= #
23
+ def initialize(
24
+ i = nil,
25
+ run_already = true
26
+ )
27
+ reset
28
+ set_input(i)
29
+ run if run_already
30
+ end
31
+
32
+ # ========================================================================= #
33
+ # === reset
34
+ # ========================================================================= #
35
+ def reset # (reset tag)
36
+ end
37
+
38
+ # ========================================================================= #
39
+ # === set_input
40
+ # ========================================================================= #
41
+ def set_input(i = '')
42
+ i = i.first if i.is_a? Array
43
+ i = i.to_s.dup if i
44
+ @input = i
45
+ end
46
+
47
+ # ========================================================================= #
48
+ # === input?
49
+ # ========================================================================= #
50
+ def input?
51
+ @input
52
+ end
53
+
54
+ # ========================================================================= #
55
+ # === store_where?
56
+ # ========================================================================= #
57
+ def store_where?
58
+ input?.gsub(File.extname(input?),'')+'.jpg'
59
+ end
60
+
61
+ # ========================================================================= #
62
+ # === run_everything
63
+ # ========================================================================= #
64
+ def run_everything
65
+ opn; e 'Next converting '+simp(input?)+' to '+sfile(store_where?)
66
+ _ = 'convert '+input?+' '+store_where?
67
+ esystem _
68
+ end
69
+
70
+ # ========================================================================= #
71
+ # === run (run tag)
72
+ # ========================================================================= #
73
+ def run
74
+ run_everything
75
+ end
76
+
77
+ end
78
+
79
+ # =========================================================================== #
80
+ # === ImageParadise.to_jpg
81
+ # =========================================================================== #
82
+ def self.to_jpg(i = ARGV)
83
+ ImageParadise::ToJpg.new(i)
84
+ end
85
+
86
+ end
87
+
88
+ if __FILE__ == $PROGRAM_NAME
89
+ ImageParadise::ToJpg.new(ARGV)
90
+ end # to_jpg
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'image_paradise/toplevel_methods/add_black_border_to_this_image.rb'
6
+ # =========================================================================== #
7
+ require 'image_paradise/toplevel_methods/e.rb'
8
+
9
+ module ImageParadise
10
+
11
+ begin
12
+ require 'esystem'
13
+ rescue LoadError; end
14
+
15
+ # ========================================================================= #
16
+ # === ImageParadise.add_black_border_to_this_image
17
+ #
18
+ # This method will add a (black) border around the given input-image.
19
+ #
20
+ # Invocation example:
21
+ #
22
+ # ImageParadise.add_black_border_to_this_image('foobar.png',3)
23
+ #
24
+ # ========================================================================= #
25
+ def self.add_black_border_to_this_image(
26
+ file_that_is_to_be_modified = 'foobar.png',
27
+ n_pixels = '1'
28
+ )
29
+ n_pixels = n_pixels.to_s
30
+ if file_that_is_to_be_modified.is_a? Array
31
+ file_that_is_to_be_modified = file_that_is_to_be_modified.first
32
+ end
33
+ if File.exist? file_that_is_to_be_modified
34
+ extname = File.extname(file_that_is_to_be_modified) # Also has a leading '.' character.
35
+ new_filename = file_that_is_to_be_modified.sub(/#{File.extname(file_that_is_to_be_modified)}/,'')
36
+ new_filename << '_black_border_'+n_pixels+'px'
37
+ new_filename << extname
38
+ _ = 'convert '+file_that_is_to_be_modified+
39
+ ' -shave '+n_pixels+'x'+n_pixels+' '\
40
+ '-bordercolor black '\
41
+ '-border '+n_pixels+' '+
42
+ new_filename
43
+ Esystem.esystem _
44
+ if File.exist? new_filename
45
+ e 'The file `'+new_filename+'` has been created.'
46
+ end
47
+ else
48
+ e 'No file exists at `'+file_that_is_to_be_modified+'`.'
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ if __FILE__ == $PROGRAM_NAME
55
+ ImageParadise.add_black_border_to_this_image(ARGV)
56
+ end # bord_black1 STUDIES.png
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # We will tap into the project crop next.
6
+ # =========================================================================== #
7
+ # require 'image_paradise/toplevel_methods/crop.rb'
8
+ # =========================================================================== #
9
+ require 'image_paradise/crop/crop.rb'
10
+
11
+ module ImageParadise
12
+
13
+ # ========================================================================= #
14
+ # === crop
15
+ #
16
+ # Delegate towards the class-method above, called ImageParadise.crop()
17
+ # ========================================================================= #
18
+ def crop(
19
+ i = filename?,
20
+ crop_command_to_use = nil,
21
+ optional_hash = {}
22
+ )
23
+ ImageParadise.crop(
24
+ i, crop_command_to_use, optional_hash
25
+ )
26
+ end
27
+
28
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'image_paradise/toplevel_methods/e.rb'
6
+ # =========================================================================== #
7
+ module ImageParadise
8
+
9
+ # ========================================================================= #
10
+ # === ImageParadise.e
11
+ # ========================================================================= #
12
+ def self.e(i = '')
13
+ puts i
14
+ end
15
+
16
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'image_paradise/toplevel_methods/esystem.rb'
6
+ # =========================================================================== #
7
+ require 'image_paradise/toplevel_methods/e.rb'
8
+
9
+ module ImageParadise
10
+
11
+ # ========================================================================= #
12
+ # === ImageParadise.esystem
13
+ # ========================================================================= #
14
+ def self.esystem(i)
15
+ e i
16
+ system(i)
17
+ end
18
+
19
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'image_paradise/toplevel_methods/extract_text_from_this_image.rb'
6
+ # =========================================================================== #
7
+ require 'image_paradise/toplevel_methods/esystem.rb'
8
+
9
+ module ImageParadise
10
+
11
+ # ========================================================================= #
12
+ # === ImageParadise.extract_text_from_this_image
13
+ #
14
+ # This method will use tesseract to extract/return text from the
15
+ # given image at hand.
16
+ #
17
+ # Invocation example:
18
+ #
19
+ # ImageParadise.extract_text_from_this_image('foobar.png')
20
+ # ImageParadise.extract_text_from_this_image('greyscaled_foo.jpg')
21
+ # ImageParadise.extract_text_from_this_image 'greyscaled_image.png'
22
+ #
23
+ # ========================================================================= #
24
+ def self.extract_text_from_this_image(
25
+ i,
26
+ use_this_oem_value = 1, # :default
27
+ do_show_the_command = false
28
+ )
29
+ i = i.join(' ').strip if i.is_a? Array
30
+ case use_this_oem_value
31
+ when :default
32
+ use_this_oem_value = 1
33
+ end
34
+ case do_show_the_command
35
+ when :do_show_the_command
36
+ do_show_the_command = true
37
+ end
38
+ use_this_command = "tesseract #{i} stdout -l eng --oem #{use_this_oem_value} --psm 3 2>&1"
39
+ if do_show_the_command
40
+ puts use_this_command
41
+ end
42
+ # ========================================================================= #
43
+ # An alternative to `` may be Open3.capture3(), such as like this:
44
+ # require 'open3'
45
+ # text, _, _ = Open3.capture3(use_this_command)
46
+ # puts text
47
+ # ========================================================================= #
48
+ result = `#{use_this_command}`
49
+ return result.strip
50
+ end; self.instance_eval { alias return_text_from_this_image extract_text_from_this_image } # === ImageParadise.return_text_from_this_image
51
+
52
+ end
53
+
54
+ if __FILE__ == $PROGRAM_NAME
55
+ ImageParadise.extract_text_from_this_image(ARGV)
56
+ end # extract_text_from_this_image