image_paradise 0.4.20

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.
Files changed (650) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +38 -0
  3. data/README.md +1015 -0
  4. data/USAGE.md +10 -0
  5. data/bin/black_white +10 -0
  6. data/bin/confree_generator +7 -0
  7. data/bin/create_new_image +7 -0
  8. data/bin/display_text_from_this_image +7 -0
  9. data/bin/draw_as_specified_from_the_yaml_file +7 -0
  10. data/bin/embed_the_filename_into_this_image +7 -0
  11. data/bin/image_paradise +7 -0
  12. data/bin/image_paradise_shell +7 -0
  13. data/bin/image_to_ascii +54 -0
  14. data/bin/image_to_pdf +7 -0
  15. data/bin/imageparadise_img2pdf +12 -0
  16. data/bin/img_text +14 -0
  17. data/bin/interlace +7 -0
  18. data/bin/jpg_to_pdf +12 -0
  19. data/bin/magic_card_border +8 -0
  20. data/bin/make_this_image_transparent +7 -0
  21. data/bin/morph_these_images +7 -0
  22. data/bin/optimize_this_image +7 -0
  23. data/bin/quality +7 -0
  24. data/bin/rename_this_file_based_on_metadata_information +7 -0
  25. data/bin/resize_by_percent +10 -0
  26. data/bin/rotate_left +7 -0
  27. data/bin/rotate_right +7 -0
  28. data/bin/round_the_corner +7 -0
  29. data/bin/ruby_montage +7 -0
  30. data/bin/transparent +15 -0
  31. data/doc/README.gen +936 -0
  32. data/doc/todo/TODO_FOR_THE_GTK_GUI.md +9 -0
  33. data/doc/todo/TODO_FOR_THE_IMAGE_PARADISE_PROJECT.md +20 -0
  34. data/doc/todo/TODO_WORK_THROUGH_THESE_LINKS.md +3 -0
  35. data/doc/todo/todo_for_the_libui_gui.md +6 -0
  36. data/image_paradise.gemspec +46 -0
  37. data/images/IMAGE_PARADISE_LOGO.png +0 -0
  38. data/lib/image_paradise/base/base.rb +324 -0
  39. data/lib/image_paradise/cfdg/1dca_pattern.cfdg +48 -0
  40. data/lib/image_paradise/cfdg/3d_coloured_cube.cfdg +95 -0
  41. data/lib/image_paradise/cfdg/a_3D_spiral.cfdg +40 -0
  42. data/lib/image_paradise/cfdg/a_chaotic_city.cfdg +156 -0
  43. data/lib/image_paradise/cfdg/a_coloured_red.cfdg +21 -0
  44. data/lib/image_paradise/cfdg/a_daisy_flower.cfdg +66 -0
  45. data/lib/image_paradise/cfdg/a_decorated_window.cfdg +74 -0
  46. data/lib/image_paradise/cfdg/a_human_profile.cfdg +303 -0
  47. data/lib/image_paradise/cfdg/a_lost_heart.cfdg +28 -0
  48. data/lib/image_paradise/cfdg/a_plant_root.cfdg +26 -0
  49. data/lib/image_paradise/cfdg/a_rather_realistic_forest.cfdg +29 -0
  50. data/lib/image_paradise/cfdg/a_shoreline_next_to_a_forest.cfdg +127 -0
  51. data/lib/image_paradise/cfdg/a_simple_mini_brain.cfdg +17 -0
  52. data/lib/image_paradise/cfdg/a_simple_star.cfdg +22 -0
  53. data/lib/image_paradise/cfdg/adorned_tree.cfdg +58 -0
  54. data/lib/image_paradise/cfdg/adsorption.cfdg +19 -0
  55. data/lib/image_paradise/cfdg/alfabet_free.cfdg +346 -0
  56. data/lib/image_paradise/cfdg/alfreebet.cfdg +229 -0
  57. data/lib/image_paradise/cfdg/algal_flora.cfdg +25 -0
  58. data/lib/image_paradise/cfdg/alien_eyeball.cfdg +15 -0
  59. data/lib/image_paradise/cfdg/alien_flower.cfdg +35 -0
  60. data/lib/image_paradise/cfdg/alphabet_circles.cfdg +38 -0
  61. data/lib/image_paradise/cfdg/alveolo.cfdg +38 -0
  62. data/lib/image_paradise/cfdg/an_icosahedron.cfdg +134 -0
  63. data/lib/image_paradise/cfdg/an_oils_surface.cfdg +48 -0
  64. data/lib/image_paradise/cfdg/ancient_map.cfdg +30 -0
  65. data/lib/image_paradise/cfdg/ancient_scripts_tile.cfdg +96 -0
  66. data/lib/image_paradise/cfdg/angelfish.cfdg +58 -0
  67. data/lib/image_paradise/cfdg/angry_yarn.cfdg +82 -0
  68. data/lib/image_paradise/cfdg/apple_tree_small.cfdg +46 -0
  69. data/lib/image_paradise/cfdg/aqua_star.cfdg +27 -0
  70. data/lib/image_paradise/cfdg/army_explosion.cfdg +25 -0
  71. data/lib/image_paradise/cfdg/arrows_in_quadcity.cfdg +143 -0
  72. data/lib/image_paradise/cfdg/artificial_intelligence.cfdg +41 -0
  73. data/lib/image_paradise/cfdg/askew.cfdg +27 -0
  74. data/lib/image_paradise/cfdg/audio_diagram_waves.cfdg +54 -0
  75. data/lib/image_paradise/cfdg/autumn_fractal.cfdg +39 -0
  76. data/lib/image_paradise/cfdg/baignoire.cfdg +33 -0
  77. data/lib/image_paradise/cfdg/barcode.cfdg +781 -0
  78. data/lib/image_paradise/cfdg/basic_polygon_shapes.cfdg +311 -0
  79. data/lib/image_paradise/cfdg/basic_spreaders.cfdg +52 -0
  80. data/lib/image_paradise/cfdg/basic_square.cfdg +8 -0
  81. data/lib/image_paradise/cfdg/bats_hiding_in_foliage.cfdg +19 -0
  82. data/lib/image_paradise/cfdg/bees.cfdg +61 -0
  83. data/lib/image_paradise/cfdg/bent_squares.cfdg +46 -0
  84. data/lib/image_paradise/cfdg/benzo_dreaming.cfdg +54 -0
  85. data/lib/image_paradise/cfdg/beta_bet.cfdg +645 -0
  86. data/lib/image_paradise/cfdg/big_bang_theory.cfdg +31 -0
  87. data/lib/image_paradise/cfdg/big_pacman.cfdg +70 -0
  88. data/lib/image_paradise/cfdg/bigger_tree.cfdg +64 -0
  89. data/lib/image_paradise/cfdg/binary_connection.cfdg +34 -0
  90. data/lib/image_paradise/cfdg/birch_line.cfdg +57 -0
  91. data/lib/image_paradise/cfdg/blacksmith_masterpiece.cfdg +3 -0
  92. data/lib/image_paradise/cfdg/blocked_rectangles.cfdg +23 -0
  93. data/lib/image_paradise/cfdg/blood_tubes.cfdg +45 -0
  94. data/lib/image_paradise/cfdg/bloom.cfdg +23 -0
  95. data/lib/image_paradise/cfdg/blown_glass_spheres.cfdg +30 -0
  96. data/lib/image_paradise/cfdg/blue_daisies_in_detail.cfdg +101 -0
  97. data/lib/image_paradise/cfdg/blue_galaxy.cfdg +20 -0
  98. data/lib/image_paradise/cfdg/blue_moon.cfdg +36 -0
  99. data/lib/image_paradise/cfdg/boa_feathers.cfdg +53 -0
  100. data/lib/image_paradise/cfdg/bomb.cfdg +75 -0
  101. data/lib/image_paradise/cfdg/boxy_continent.cfdg +111 -0
  102. data/lib/image_paradise/cfdg/bright_coloured_neurons.cfdg +53 -0
  103. data/lib/image_paradise/cfdg/brightness_flower.cfdg +31 -0
  104. data/lib/image_paradise/cfdg/btp_71_beautiful_coloured_lines.cfdg +85 -0
  105. data/lib/image_paradise/cfdg/btp_73.cfdg +76 -0
  106. data/lib/image_paradise/cfdg/bubblesun.cfdg +46 -0
  107. data/lib/image_paradise/cfdg/burning_bush.cfdg +31 -0
  108. data/lib/image_paradise/cfdg/butterflies_in_the_moonlight.cfdg +55 -0
  109. data/lib/image_paradise/cfdg/cardiod_arc.cfdg +44 -0
  110. data/lib/image_paradise/cfdg/cardioid.cfdg +41 -0
  111. data/lib/image_paradise/cfdg/caros_wallpaper.cfdg +46 -0
  112. data/lib/image_paradise/cfdg/cartoony_face_arrays.cfdg +137 -0
  113. data/lib/image_paradise/cfdg/centerfold.cfdg +12 -0
  114. data/lib/image_paradise/cfdg/chain_link_fence.cfdg +31 -0
  115. data/lib/image_paradise/cfdg/chanukah.cfdg +109 -0
  116. data/lib/image_paradise/cfdg/chaos_red_sun.cfdg +42 -0
  117. data/lib/image_paradise/cfdg/chaotic_farn.cfdg +76 -0
  118. data/lib/image_paradise/cfdg/chaotic_fractal_shell.cfdg +41 -0
  119. data/lib/image_paradise/cfdg/charleston.cfdg +182 -0
  120. data/lib/image_paradise/cfdg/ciliasun.cfdg +109 -0
  121. data/lib/image_paradise/cfdg/cipal.cfdg +65 -0
  122. data/lib/image_paradise/cfdg/circuits.cfdg +176 -0
  123. data/lib/image_paradise/cfdg/city_map.cfdg +66 -0
  124. data/lib/image_paradise/cfdg/clifford_torus.cfdg +135 -0
  125. data/lib/image_paradise/cfdg/colonize_flat_colour_pattern.cfdg +14 -0
  126. data/lib/image_paradise/cfdg/colour_blind_squid.cfdg +30 -0
  127. data/lib/image_paradise/cfdg/colour_hole.cfdg +56 -0
  128. data/lib/image_paradise/cfdg/colour_wheel.cfdg +40 -0
  129. data/lib/image_paradise/cfdg/coloured_eyes.cfdg +40 -0
  130. data/lib/image_paradise/cfdg/coloured_forest.cfdg +133 -0
  131. data/lib/image_paradise/cfdg/coloured_tree.cfdg +50 -0
  132. data/lib/image_paradise/cfdg/colourful_lives.cfdg +123 -0
  133. data/lib/image_paradise/cfdg/colourful_neuronal_network.cfdg +32 -0
  134. data/lib/image_paradise/cfdg/complex_city_plans.cfdg +75 -0
  135. data/lib/image_paradise/cfdg/complex_kritworks.cfdg +75 -0
  136. data/lib/image_paradise/cfdg/complex_snowflake.cfdg +61 -0
  137. data/lib/image_paradise/cfdg/conspiracy_theory.cfdg +104 -0
  138. data/lib/image_paradise/cfdg/constellation_grid.cfdg +29 -0
  139. data/lib/image_paradise/cfdg/cool_caterpillar.cfdg +44 -0
  140. data/lib/image_paradise/cfdg/coolcubes.cfdg +70 -0
  141. data/lib/image_paradise/cfdg/crawler_battle.cfdg +93 -0
  142. data/lib/image_paradise/cfdg/crazy_octo.cfdg +48 -0
  143. data/lib/image_paradise/cfdg/cthulhu.cfdg +166 -0
  144. data/lib/image_paradise/cfdg/cubies.cfdg +43 -0
  145. data/lib/image_paradise/cfdg/cubist_sunset.cfdg +55 -0
  146. data/lib/image_paradise/cfdg/curled_tree.cfdg +37 -0
  147. data/lib/image_paradise/cfdg/curls.cfdg +45 -0
  148. data/lib/image_paradise/cfdg/curve_stiched.cfdg +59 -0
  149. data/lib/image_paradise/cfdg/curved_tubes.cfdg +20 -0
  150. data/lib/image_paradise/cfdg/cylinder_city.cfdg +27 -0
  151. data/lib/image_paradise/cfdg/cymbal.cfdg +38 -0
  152. data/lib/image_paradise/cfdg/d_mustard.cfdg +52 -0
  153. data/lib/image_paradise/cfdg/dance_party.cfdg +81 -0
  154. data/lib/image_paradise/cfdg/dance_party_and_background.cfdg +86 -0
  155. data/lib/image_paradise/cfdg/decreasing_aperture.cfdg +16 -0
  156. data/lib/image_paradise/cfdg/delicat_twist.cfdg +13 -0
  157. data/lib/image_paradise/cfdg/demo_text.cfdg +22 -0
  158. data/lib/image_paradise/cfdg/dennis_ritchie.cfdg +294 -0
  159. data/lib/image_paradise/cfdg/diablo.cfdg +47 -0
  160. data/lib/image_paradise/cfdg/different_flowers.cfdg +60 -0
  161. data/lib/image_paradise/cfdg/different_snowflakes_shapes.cfdg +149 -0
  162. data/lib/image_paradise/cfdg/dimensions.cfdg +33 -0
  163. data/lib/image_paradise/cfdg/domino_pieces.cfdg +166 -0
  164. data/lib/image_paradise/cfdg/dong.cfdg +41 -0
  165. data/lib/image_paradise/cfdg/drip_shape.cfdg +24 -0
  166. data/lib/image_paradise/cfdg/earthday2007b.cfdg +49 -0
  167. data/lib/image_paradise/cfdg/edera_circles.cfdg +55 -0
  168. data/lib/image_paradise/cfdg/eight_queens_problem.cfdg +85 -0
  169. data/lib/image_paradise/cfdg/electro_shock.cfdg +88 -0
  170. data/lib/image_paradise/cfdg/enter_the_force_field.cfdg +56 -0
  171. data/lib/image_paradise/cfdg/escargot_fleur.cfdg +98 -0
  172. data/lib/image_paradise/cfdg/european_city.cfdg +63 -0
  173. data/lib/image_paradise/cfdg/evil_eye.cfdg +74 -0
  174. data/lib/image_paradise/cfdg/evolving_coloured_spots.cfdg +47 -0
  175. data/lib/image_paradise/cfdg/excellines_nr2.cfdg +171 -0
  176. data/lib/image_paradise/cfdg/exoplanet_settlement.cfdg +117 -0
  177. data/lib/image_paradise/cfdg/explosion.cfdg +45 -0
  178. data/lib/image_paradise/cfdg/explosion_of_a_megabyte.cfdg +73 -0
  179. data/lib/image_paradise/cfdg/eye_of_katora.cfdg +20 -0
  180. data/lib/image_paradise/cfdg/family_tree.cfdg +169 -0
  181. data/lib/image_paradise/cfdg/feathers.cfdg +17 -0
  182. data/lib/image_paradise/cfdg/ferma_drawings.cfdg +23 -0
  183. data/lib/image_paradise/cfdg/fevrier.cfdg +66 -0
  184. data/lib/image_paradise/cfdg/fibmod.cfdg +25 -0
  185. data/lib/image_paradise/cfdg/field_of_boxes.cfdg +21 -0
  186. data/lib/image_paradise/cfdg/finetre.cfdg +34 -0
  187. data/lib/image_paradise/cfdg/fireblorks.cfdg +37 -0
  188. data/lib/image_paradise/cfdg/first_branch.cfdg +18 -0
  189. data/lib/image_paradise/cfdg/fish_with_coloured_bubbles.cfdg +77 -0
  190. data/lib/image_paradise/cfdg/fishing_lure.cfdg +30 -0
  191. data/lib/image_paradise/cfdg/flake.cfdg +20 -0
  192. data/lib/image_paradise/cfdg/flaming_spiro.cfdg +10 -0
  193. data/lib/image_paradise/cfdg/fleshflower.cfdg +25 -0
  194. data/lib/image_paradise/cfdg/flourescent_fish_btp.cfdg +48 -0
  195. data/lib/image_paradise/cfdg/flow_control_shape.cfdg +45 -0
  196. data/lib/image_paradise/cfdg/flower_galaxy.cfdg +57 -0
  197. data/lib/image_paradise/cfdg/flower_house.cfdg +115 -0
  198. data/lib/image_paradise/cfdg/flower_stories.cfdg +136 -0
  199. data/lib/image_paradise/cfdg/fluctuating_heart.cfdg +87 -0
  200. data/lib/image_paradise/cfdg/fly_agaric.cfdg +22 -0
  201. data/lib/image_paradise/cfdg/forest_and_ocean.cfdg +65 -0
  202. data/lib/image_paradise/cfdg/fractal_fern.cfdg +15 -0
  203. data/lib/image_paradise/cfdg/fractal_shell.cfdg +36 -0
  204. data/lib/image_paradise/cfdg/frost_bite.cfdg +23 -0
  205. data/lib/image_paradise/cfdg/fun_with_paper.cfdg +17 -0
  206. data/lib/image_paradise/cfdg/func_plot.cfdg +59 -0
  207. data/lib/image_paradise/cfdg/funky_squiggle.cfdg +40 -0
  208. data/lib/image_paradise/cfdg/fuzzy_sun.cfdg +47 -0
  209. data/lib/image_paradise/cfdg/galaxy.cfdg +59 -0
  210. data/lib/image_paradise/cfdg/gallery.cfdg +28 -0
  211. data/lib/image_paradise/cfdg/game1_turn6.cfdg +35 -0
  212. data/lib/image_paradise/cfdg/garland.cfdg +42 -0
  213. data/lib/image_paradise/cfdg/general_polygons.cfdg +20 -0
  214. data/lib/image_paradise/cfdg/generational_birds.cfdg +118 -0
  215. data/lib/image_paradise/cfdg/ghostly_spine.cfdg +24 -0
  216. data/lib/image_paradise/cfdg/gift_wrapping.cfdg +46 -0
  217. data/lib/image_paradise/cfdg/glass_cubes.cfdg +33 -0
  218. data/lib/image_paradise/cfdg/gleaming_bush.cfdg +33 -0
  219. data/lib/image_paradise/cfdg/glowing_bush.cfdg +33 -0
  220. data/lib/image_paradise/cfdg/go_grid.cfdg +32 -0
  221. data/lib/image_paradise/cfdg/gold_tiles.cfdg +21 -0
  222. data/lib/image_paradise/cfdg/golden_rectangle.cfdg +19 -0
  223. data/lib/image_paradise/cfdg/golden_sierpinski.cfdg +49 -0
  224. data/lib/image_paradise/cfdg/golgi_stain.cfdg +74 -0
  225. data/lib/image_paradise/cfdg/gothic_bath_tiles.cfdg +14 -0
  226. data/lib/image_paradise/cfdg/grass_land.cfdg +112 -0
  227. data/lib/image_paradise/cfdg/gray_matter.cfdg +110 -0
  228. data/lib/image_paradise/cfdg/great_forest.cfdg +91 -0
  229. data/lib/image_paradise/cfdg/growth.cfdg +46 -0
  230. data/lib/image_paradise/cfdg/gumtree.cfdg +28 -0
  231. data/lib/image_paradise/cfdg/haggards_bull.cfdg +92 -0
  232. data/lib/image_paradise/cfdg/haight_ashbury.cfdg +882 -0
  233. data/lib/image_paradise/cfdg/hair_pattern.cfdg +59 -0
  234. data/lib/image_paradise/cfdg/hairy.cfdg +43 -0
  235. data/lib/image_paradise/cfdg/hairy_branch.cfdg +48 -0
  236. data/lib/image_paradise/cfdg/hands_and_feet.cfdg +49 -0
  237. data/lib/image_paradise/cfdg/happy_new_year.cfdg +3435 -0
  238. data/lib/image_paradise/cfdg/hatagu_lila_spiral.cfdg +27 -0
  239. data/lib/image_paradise/cfdg/hexaeder_triangle.cfdg +43 -0
  240. data/lib/image_paradise/cfdg/hexclouds_textures.cfdg +75 -0
  241. data/lib/image_paradise/cfdg/hextiles.cfdg +73 -0
  242. data/lib/image_paradise/cfdg/hexy_continent.cfdg +83 -0
  243. data/lib/image_paradise/cfdg/human_ballet.cfdg +215 -0
  244. data/lib/image_paradise/cfdg/human_eyes.cfdg +102 -0
  245. data/lib/image_paradise/cfdg/hydra_tail.cfdg +57 -0
  246. data/lib/image_paradise/cfdg/i_like_it_dirty.cfdg +88 -0
  247. data/lib/image_paradise/cfdg/i_pix.cfdg +679 -0
  248. data/lib/image_paradise/cfdg/imaginary_star.cfdg +55 -0
  249. data/lib/image_paradise/cfdg/imaginery_forest.cfdg +61 -0
  250. data/lib/image_paradise/cfdg/impossible_stairs.cfdg +211 -0
  251. data/lib/image_paradise/cfdg/in_the_morning.cfdg +83 -0
  252. data/lib/image_paradise/cfdg/inertial_confinement.cfdg +150 -0
  253. data/lib/image_paradise/cfdg/infected_shell.cfdg +56 -0
  254. data/lib/image_paradise/cfdg/insect_fight.cfdg +316 -0
  255. data/lib/image_paradise/cfdg/insectivore.cfdg +80 -0
  256. data/lib/image_paradise/cfdg/interference.cfdg +43 -0
  257. data/lib/image_paradise/cfdg/interference_fields.cfdg +25 -0
  258. data/lib/image_paradise/cfdg/into_the_deep.cfdg +96 -0
  259. data/lib/image_paradise/cfdg/inverted_decorations.cfdg +85 -0
  260. data/lib/image_paradise/cfdg/irregular_galaxies.cfdg +29 -0
  261. data/lib/image_paradise/cfdg/iso_blocks.cfdg +35 -0
  262. data/lib/image_paradise/cfdg/jewelry_old_style.cfdg +31 -0
  263. data/lib/image_paradise/cfdg/just_some_flowers.cfdg +127 -0
  264. data/lib/image_paradise/cfdg/kaboom.cfdg +40 -0
  265. data/lib/image_paradise/cfdg/kaleidoskop.cfdg +27 -0
  266. data/lib/image_paradise/cfdg/kama_sutra.cfdg +182 -0
  267. data/lib/image_paradise/cfdg/kitakoa_akiyoshi_illusions_roller.cfdg +40 -0
  268. data/lib/image_paradise/cfdg/koch_snowflake.cfdg +11 -0
  269. data/lib/image_paradise/cfdg/kochlea.cfdg +43 -0
  270. data/lib/image_paradise/cfdg/kreepykrawler.cfdg +48 -0
  271. data/lib/image_paradise/cfdg/kw_expanded_explosion.cfdg +46 -0
  272. data/lib/image_paradise/cfdg/lapsang_abstrait.cfdg +51 -0
  273. data/lib/image_paradise/cfdg/laser.cfdg +51 -0
  274. data/lib/image_paradise/cfdg/last_pluto_dream.cfdg +95 -0
  275. data/lib/image_paradise/cfdg/lazy_dust.cfdg +42 -0
  276. data/lib/image_paradise/cfdg/lesson_one_two_three_four.cfdg +217 -0
  277. data/lib/image_paradise/cfdg/lila_lili.cfdg +60 -0
  278. data/lib/image_paradise/cfdg/lindenmayergrassef2_pretty_flowers.cfdg +94 -0
  279. data/lib/image_paradise/cfdg/lines_from_excel.cfdg +136 -0
  280. data/lib/image_paradise/cfdg/looking_out.cfdg +51 -0
  281. data/lib/image_paradise/cfdg/looking_up_in_the_sky.cfdg +43 -0
  282. data/lib/image_paradise/cfdg/lotus_logo.cfdg +49 -0
  283. data/lib/image_paradise/cfdg/lowercased_alphabet.cfdg +565 -0
  284. data/lib/image_paradise/cfdg/luma_smiley.cfdg +563 -0
  285. data/lib/image_paradise/cfdg/maggi_stars.cfdg +11 -0
  286. data/lib/image_paradise/cfdg/mandelbrot_3.cfdg +111 -0
  287. data/lib/image_paradise/cfdg/martini.cfdg +147 -0
  288. data/lib/image_paradise/cfdg/material_studies.cfdg +172 -0
  289. data/lib/image_paradise/cfdg/math_eye.cfdg +30 -0
  290. data/lib/image_paradise/cfdg/matrix_freestyle.cfdg +127 -0
  291. data/lib/image_paradise/cfdg/maze.cfdg +211 -0
  292. data/lib/image_paradise/cfdg/meaculpo.cfdg +46 -0
  293. data/lib/image_paradise/cfdg/medieval_madness.cfdg +140 -0
  294. data/lib/image_paradise/cfdg/menage_a_trois.cfdg +77 -0
  295. data/lib/image_paradise/cfdg/micky_mouse.cfdg +75 -0
  296. data/lib/image_paradise/cfdg/mistletoe_forest.cfdg +62 -0
  297. data/lib/image_paradise/cfdg/mixed_simple_bubbles.cfdg +20 -0
  298. data/lib/image_paradise/cfdg/mod4g_starhole.cfdg +27 -0
  299. data/lib/image_paradise/cfdg/moebius.cfdg +57 -0
  300. data/lib/image_paradise/cfdg/molecules.cfdg +30 -0
  301. data/lib/image_paradise/cfdg/momos_blossom.cfdg +70 -0
  302. data/lib/image_paradise/cfdg/mona_lisa.cfdg +7937 -0
  303. data/lib/image_paradise/cfdg/more_arrows_in_quadcity.cfdg +49 -0
  304. data/lib/image_paradise/cfdg/more_cats.cfdg +1002 -0
  305. data/lib/image_paradise/cfdg/mosaic_for_2D_games.cfdg +69 -0
  306. data/lib/image_paradise/cfdg/mr_bezier.cfdg +195 -0
  307. data/lib/image_paradise/cfdg/mtree.cfdg +33 -0
  308. data/lib/image_paradise/cfdg/multiple_triangles.cfdg +13 -0
  309. data/lib/image_paradise/cfdg/mycel.cfdg +88 -0
  310. data/lib/image_paradise/cfdg/mytohexagone.cfdg +56 -0
  311. data/lib/image_paradise/cfdg/nature_is_not_like_that.cfdg +48 -0
  312. data/lib/image_paradise/cfdg/negative_flowers.cfdg +85 -0
  313. data/lib/image_paradise/cfdg/neo_town.cfdg +41 -0
  314. data/lib/image_paradise/cfdg/nesting_pattern.cfdg +34 -0
  315. data/lib/image_paradise/cfdg/neuronal_network.cfdg +94 -0
  316. data/lib/image_paradise/cfdg/neuronal_root.cfdg +46 -0
  317. data/lib/image_paradise/cfdg/night.cfdg +82 -0
  318. data/lib/image_paradise/cfdg/nightwalker.cfdg +23 -0
  319. data/lib/image_paradise/cfdg/no_xcape.cfdg +41 -0
  320. data/lib/image_paradise/cfdg/noise.cfdg +12 -0
  321. data/lib/image_paradise/cfdg/octopodi.cfdg +51 -0
  322. data/lib/image_paradise/cfdg/octopussy.cfdg +49 -0
  323. data/lib/image_paradise/cfdg/oldschool_cartoon_figure.cfdg +181 -0
  324. data/lib/image_paradise/cfdg/open_shapes.cfdg +240 -0
  325. data/lib/image_paradise/cfdg/orange_blossom.cfdg +57 -0
  326. data/lib/image_paradise/cfdg/orange_guts.cfdg +43 -0
  327. data/lib/image_paradise/cfdg/orange_monster.cfdg +42 -0
  328. data/lib/image_paradise/cfdg/organic.cfdg +30 -0
  329. data/lib/image_paradise/cfdg/ouo_happy_smiley.cfdg +45 -0
  330. data/lib/image_paradise/cfdg/output.png +0 -0
  331. data/lib/image_paradise/cfdg/pacman.cfdg +18 -0
  332. data/lib/image_paradise/cfdg/palmen.cfdg +162 -0
  333. data/lib/image_paradise/cfdg/pandoras_box.cfdg +53 -0
  334. data/lib/image_paradise/cfdg/papillon_butterfly.cfdg +28 -0
  335. data/lib/image_paradise/cfdg/patchwork.cfdg +32 -0
  336. data/lib/image_paradise/cfdg/pattern_grass.cfdg +110 -0
  337. data/lib/image_paradise/cfdg/peau_de_grenouille.cfdg +16 -0
  338. data/lib/image_paradise/cfdg/penrose_tiling.cfdg +102 -0
  339. data/lib/image_paradise/cfdg/pentagon.cfdg +68 -0
  340. data/lib/image_paradise/cfdg/pentagons.cfdg +25 -0
  341. data/lib/image_paradise/cfdg/perspective_tsunami.cfdg +20 -0
  342. data/lib/image_paradise/cfdg/phi_cloud.cfdg +23 -0
  343. data/lib/image_paradise/cfdg/picnic_birds_eye_view.cfdg +132 -0
  344. data/lib/image_paradise/cfdg/ping_pong.cfdg +29 -0
  345. data/lib/image_paradise/cfdg/pink_blossom.cfdg +58 -0
  346. data/lib/image_paradise/cfdg/piupole.cfdg +77 -0
  347. data/lib/image_paradise/cfdg/plotting.cfdg +61 -0
  348. data/lib/image_paradise/cfdg/point_onto_root.cfdg +64 -0
  349. data/lib/image_paradise/cfdg/primitive_reptile_pattern.cfdg +96 -0
  350. data/lib/image_paradise/cfdg/psycho_knot.cfdg +20 -0
  351. data/lib/image_paradise/cfdg/pyramide.cfdg +67 -0
  352. data/lib/image_paradise/cfdg/pythagoras_puzzle.cfdg +17 -0
  353. data/lib/image_paradise/cfdg/pythagorean_tree.cfdg +70 -0
  354. data/lib/image_paradise/cfdg/qimica.cfdg +64 -0
  355. data/lib/image_paradise/cfdg/quad_green_satellite.cfdg +53 -0
  356. data/lib/image_paradise/cfdg/quadcity.cfdg +24 -0
  357. data/lib/image_paradise/cfdg/quiet_wood_town.cfdg +195 -0
  358. data/lib/image_paradise/cfdg/r180.cfdg +26 -0
  359. data/lib/image_paradise/cfdg/r45.cfdg +26 -0
  360. data/lib/image_paradise/cfdg/r_square.cfdg +36 -0
  361. data/lib/image_paradise/cfdg/rads.cfdg +33 -0
  362. data/lib/image_paradise/cfdg/rainbow_black_hole.cfdg +9 -0
  363. data/lib/image_paradise/cfdg/rainbow_sun.cfdg +9 -0
  364. data/lib/image_paradise/cfdg/random_handwriting.cfdg +50 -0
  365. data/lib/image_paradise/cfdg/random_tile_shapes_jens_revisited.cfdg +146 -0
  366. data/lib/image_paradise/cfdg/rays_attack.cfdg +29 -0
  367. data/lib/image_paradise/cfdg/razpad.cfdg +20 -0
  368. data/lib/image_paradise/cfdg/rectangular_distortion.cfdg +169 -0
  369. data/lib/image_paradise/cfdg/recurse_path.cfdg +38 -0
  370. data/lib/image_paradise/cfdg/red_flurry.cfdg +64 -0
  371. data/lib/image_paradise/cfdg/red_horse_tail.cfdg +36 -0
  372. data/lib/image_paradise/cfdg/red_yellow_mosaic.cfdg +26 -0
  373. data/lib/image_paradise/cfdg/rendering_tests.cfdg +183 -0
  374. data/lib/image_paradise/cfdg/repeat_floor_tile_pattern.cfdg +153 -0
  375. data/lib/image_paradise/cfdg/repeat_tile.cfdg +160 -0
  376. data/lib/image_paradise/cfdg/retro_disc.cfdg +736 -0
  377. data/lib/image_paradise/cfdg/ring_growth_variation.cfdg +41 -0
  378. data/lib/image_paradise/cfdg/robot_nightlife.cfdg +25 -0
  379. data/lib/image_paradise/cfdg/rolled_firespiral.cfdg +34 -0
  380. data/lib/image_paradise/cfdg/rose.cfdg +44 -0
  381. data/lib/image_paradise/cfdg/round_tree.cfdg +121 -0
  382. data/lib/image_paradise/cfdg/rubiks_cube.cfdg +120 -0
  383. data/lib/image_paradise/cfdg/ruins.cfdg +19 -0
  384. data/lib/image_paradise/cfdg/sails_and_the_sea.cfdg +27 -0
  385. data/lib/image_paradise/cfdg/salt_crystals.cfdg +26 -0
  386. data/lib/image_paradise/cfdg/saturn.cfdg +105 -0
  387. data/lib/image_paradise/cfdg/scary_pot.cfdg +49 -0
  388. data/lib/image_paradise/cfdg/schematic_worm.cfdg +35 -0
  389. data/lib/image_paradise/cfdg/school_script.cfdg +359 -0
  390. data/lib/image_paradise/cfdg/seahorse.cfdg +78 -0
  391. data/lib/image_paradise/cfdg/seasons.cfdg +115 -0
  392. data/lib/image_paradise/cfdg/segmental_veins.cfdg +66 -0
  393. data/lib/image_paradise/cfdg/select_mayhem.cfdg +28 -0
  394. data/lib/image_paradise/cfdg/seven_folded_symmetry.cfdg +7 -0
  395. data/lib/image_paradise/cfdg/several_cats.cfdg +996 -0
  396. data/lib/image_paradise/cfdg/shadow_box.cfdg +49 -0
  397. data/lib/image_paradise/cfdg/shadowrun_google_maps.cfdg +66 -0
  398. data/lib/image_paradise/cfdg/shadowrun_nightline.cfdg +18 -0
  399. data/lib/image_paradise/cfdg/shards.cfdg +70 -0
  400. data/lib/image_paradise/cfdg/sheet_music.cfdg +213 -0
  401. data/lib/image_paradise/cfdg/shy_guy.cfdg +886 -0
  402. data/lib/image_paradise/cfdg/sierpinski1.cfdg +41 -0
  403. data/lib/image_paradise/cfdg/sierpinski2.cfdg +34 -0
  404. data/lib/image_paradise/cfdg/sierpinski_like_red_swirl.cfdg +46 -0
  405. data/lib/image_paradise/cfdg/sierpinsktri.cfdg +9 -0
  406. data/lib/image_paradise/cfdg/silk_flowers.cfdg +68 -0
  407. data/lib/image_paradise/cfdg/silk_scarf.cfdg +18 -0
  408. data/lib/image_paradise/cfdg/simple_cilia.cfdg +88 -0
  409. data/lib/image_paradise/cfdg/simple_circle_and_square.cfdg +7 -0
  410. data/lib/image_paradise/cfdg/simple_coloured_square.cfdg +38 -0
  411. data/lib/image_paradise/cfdg/simple_ferns.cfdg +40 -0
  412. data/lib/image_paradise/cfdg/simple_fish.cfdg +77 -0
  413. data/lib/image_paradise/cfdg/simple_orchid.cfdg +23 -0
  414. data/lib/image_paradise/cfdg/simple_rounded_colour_wheel.cfdg +10 -0
  415. data/lib/image_paradise/cfdg/simple_sheet_music.cfdg +27 -0
  416. data/lib/image_paradise/cfdg/sincos_pattern_2.cfdg +42 -0
  417. data/lib/image_paradise/cfdg/singing_birdy.cfdg +112 -0
  418. data/lib/image_paradise/cfdg/skyscraper.cfdg +85 -0
  419. data/lib/image_paradise/cfdg/small_golden_rectangle.cfdg +12 -0
  420. data/lib/image_paradise/cfdg/smells_like_layered.cfdg +43 -0
  421. data/lib/image_paradise/cfdg/snowflake.cfdg +26 -0
  422. data/lib/image_paradise/cfdg/snowstorm.cfdg +26 -0
  423. data/lib/image_paradise/cfdg/soar_on_wings.cfdg +8 -0
  424. data/lib/image_paradise/cfdg/soft_core.cfdg +26 -0
  425. data/lib/image_paradise/cfdg/soft_touch.cfdg +20 -0
  426. data/lib/image_paradise/cfdg/some_sort_of_tree.cfdg +57 -0
  427. data/lib/image_paradise/cfdg/spade_ball.cfdg +39 -0
  428. data/lib/image_paradise/cfdg/sparks.cfdg +39 -0
  429. data/lib/image_paradise/cfdg/sperm.cfdg +63 -0
  430. data/lib/image_paradise/cfdg/sphinx.cfdg +17 -0
  431. data/lib/image_paradise/cfdg/spiral_clusters.cfdg +29 -0
  432. data/lib/image_paradise/cfdg/spiral_cross.cfdg +27 -0
  433. data/lib/image_paradise/cfdg/spiral_star.cfdg +19 -0
  434. data/lib/image_paradise/cfdg/spiral_sun.cfdg +39 -0
  435. data/lib/image_paradise/cfdg/spirit.cfdg +47 -0
  436. data/lib/image_paradise/cfdg/splatter_tree.cfdg +61 -0
  437. data/lib/image_paradise/cfdg/spliced.cfdg +27 -0
  438. data/lib/image_paradise/cfdg/spring_parade.cfdg +105 -0
  439. data/lib/image_paradise/cfdg/sprinkle_explosion.cfdg +23 -0
  440. data/lib/image_paradise/cfdg/square_limit_one.cfdg +15 -0
  441. data/lib/image_paradise/cfdg/square_rose.cfdg +75 -0
  442. data/lib/image_paradise/cfdg/square_spiral4.cfdg +41 -0
  443. data/lib/image_paradise/cfdg/square_star.cfdg +39 -0
  444. data/lib/image_paradise/cfdg/squiggle.cfdg +54 -0
  445. data/lib/image_paradise/cfdg/stacked_blob.cfdg +27 -0
  446. data/lib/image_paradise/cfdg/star_explosion.cfdg +38 -0
  447. data/lib/image_paradise/cfdg/star_flower.cfdg +72 -0
  448. data/lib/image_paradise/cfdg/star_mosaic_2007.cfdg +51 -0
  449. data/lib/image_paradise/cfdg/starry_pines.cfdg +79 -0
  450. data/lib/image_paradise/cfdg/stars_tentacles.cfdg +28 -0
  451. data/lib/image_paradise/cfdg/starshape.cfdg +57 -0
  452. data/lib/image_paradise/cfdg/strange_antlers.cfdg +49 -0
  453. data/lib/image_paradise/cfdg/strange_carpet.cfdg +13 -0
  454. data/lib/image_paradise/cfdg/sunset_city.cfdg +112 -0
  455. data/lib/image_paradise/cfdg/sweep.cfdg +946 -0
  456. data/lib/image_paradise/cfdg/swimmers_sperms.cfdg +54 -0
  457. data/lib/image_paradise/cfdg/sword.cfdg +24 -0
  458. data/lib/image_paradise/cfdg/tangle.cfdg +25 -0
  459. data/lib/image_paradise/cfdg/tapestry.cfdg +40 -0
  460. data/lib/image_paradise/cfdg/tasty_loops.cfdg +97 -0
  461. data/lib/image_paradise/cfdg/tendril.cfdg +6 -0
  462. data/lib/image_paradise/cfdg/tentacle_tree.cfdg +57 -0
  463. data/lib/image_paradise/cfdg/terraforming.cfdg +87 -0
  464. data/lib/image_paradise/cfdg/test.cfdg +7 -0
  465. data/lib/image_paradise/cfdg/tetris.cfdg +123 -0
  466. data/lib/image_paradise/cfdg/textured_giraffes.cfdg +122 -0
  467. data/lib/image_paradise/cfdg/the_eye.cfdg +16 -0
  468. data/lib/image_paradise/cfdg/the_go_game.cfdg +81 -0
  469. data/lib/image_paradise/cfdg/the_secret.cfdg +52 -0
  470. data/lib/image_paradise/cfdg/the_third_eye.cfdg +42 -0
  471. data/lib/image_paradise/cfdg/thingy.cfdg +13 -0
  472. data/lib/image_paradise/cfdg/thorns.cfdg +26 -0
  473. data/lib/image_paradise/cfdg/too_many_notes.cfdg +155 -0
  474. data/lib/image_paradise/cfdg/top_down_plant_root.cfdg +43 -0
  475. data/lib/image_paradise/cfdg/top_view_tree.cfdg +79 -0
  476. data/lib/image_paradise/cfdg/transparent_heart.cfdg +31 -0
  477. data/lib/image_paradise/cfdg/tree.cfdg +68 -0
  478. data/lib/image_paradise/cfdg/tree_number_5.cfdg +28 -0
  479. data/lib/image_paradise/cfdg/tree_retro.cfdg +46 -0
  480. data/lib/image_paradise/cfdg/tree_spiral.cfdg +52 -0
  481. data/lib/image_paradise/cfdg/treematic.cfdg +42 -0
  482. data/lib/image_paradise/cfdg/tri_arc.cfdg +16 -0
  483. data/lib/image_paradise/cfdg/tri_squares.cfdg +7 -0
  484. data/lib/image_paradise/cfdg/tube_map.cfdg +112 -0
  485. data/lib/image_paradise/cfdg/turing_morphogenesis.cfdg +788 -0
  486. data/lib/image_paradise/cfdg/twisted_hex_grid.cfdg +26 -0
  487. data/lib/image_paradise/cfdg/twisty_triangel.cfdg +79 -0
  488. data/lib/image_paradise/cfdg/twizeeded.cfdg +19 -0
  489. data/lib/image_paradise/cfdg/uncontrolled_fungus.cfdg +36 -0
  490. data/lib/image_paradise/cfdg/underground.cfdg +72 -0
  491. data/lib/image_paradise/cfdg/underwater.cfdg +75 -0
  492. data/lib/image_paradise/cfdg/unicorn_boi.cfdg +20 -0
  493. data/lib/image_paradise/cfdg/unification_sign.cfdg +52 -0
  494. data/lib/image_paradise/cfdg/urban_connections.cfdg +44 -0
  495. data/lib/image_paradise/cfdg/us_flag.cfdg +109 -0
  496. data/lib/image_paradise/cfdg/v_null.cfdg +89 -0
  497. data/lib/image_paradise/cfdg/very_simple_flower.cfdg +45 -0
  498. data/lib/image_paradise/cfdg/very_simple_hexagon.cfdg +16 -0
  499. data/lib/image_paradise/cfdg/very_simple_octagon.cfg +13 -0
  500. data/lib/image_paradise/cfdg/vigorous_vine.cfdg +45 -0
  501. data/lib/image_paradise/cfdg/ville_topview.cfdg +70 -0
  502. data/lib/image_paradise/cfdg/vine.cfdg +176 -0
  503. data/lib/image_paradise/cfdg/vinyl.cfdg +12 -0
  504. data/lib/image_paradise/cfdg/violet_ribbons.cfdg +45 -0
  505. data/lib/image_paradise/cfdg/voronoi_2.cfdg +61 -0
  506. data/lib/image_paradise/cfdg/wald.cfdg +46 -0
  507. data/lib/image_paradise/cfdg/water_ink.cfdg +71 -0
  508. data/lib/image_paradise/cfdg/water_monster.cfdg +33 -0
  509. data/lib/image_paradise/cfdg/web.cfdg +53 -0
  510. data/lib/image_paradise/cfdg/weighting_demo.cfdg +16 -0
  511. data/lib/image_paradise/cfdg/weird_spots.cfdg +15 -0
  512. data/lib/image_paradise/cfdg/welcome.cfdg +109 -0
  513. data/lib/image_paradise/cfdg/where_do_you_want_to_go_today.cfdg +632 -0
  514. data/lib/image_paradise/cfdg/where_is_the_head.cfdg +28 -0
  515. data/lib/image_paradise/cfdg/where_to_go.cfdg +62 -0
  516. data/lib/image_paradise/cfdg/willow.cfdg +39 -0
  517. data/lib/image_paradise/cfdg/witch_poison.cfdg +58 -0
  518. data/lib/image_paradise/cfdg/wooden_floor.cfdg +95 -0
  519. data/lib/image_paradise/cfdg/writhing.cfdg +15 -0
  520. data/lib/image_paradise/cfdg/wrooom_cars.cfdg +124 -0
  521. data/lib/image_paradise/cfdg/xmas_code.cfdg +101 -0
  522. data/lib/image_paradise/cfdg/xmas_tree.cfdg +70 -0
  523. data/lib/image_paradise/cfdg/yellow_cactus.cfdg +52 -0
  524. data/lib/image_paradise/cfdg/yet_another_explosion.cfdg +46 -0
  525. data/lib/image_paradise/cfdg/yin_yang_taijitu_pattern.cfdg +44 -0
  526. data/lib/image_paradise/cfdg/yog.cfdg +27 -0
  527. data/lib/image_paradise/cfdg/yurbanis_m.cfdg +27 -0
  528. data/lib/image_paradise/cfdg/zen_tree.cfdg +79 -0
  529. data/lib/image_paradise/cfdg/ziggy_flowers.cfdg +44 -0
  530. data/lib/image_paradise/cfdg/zodiac.cfdg +43 -0
  531. data/lib/image_paradise/chunky_png/chunky_png.rb +54 -0
  532. data/lib/image_paradise/colours/colours.rb +55 -0
  533. data/lib/image_paradise/confree_generator/confree_generator.rb +793 -0
  534. data/lib/image_paradise/confree_generator/constants.rb +93 -0
  535. data/lib/image_paradise/constants/constants.rb +50 -0
  536. data/lib/image_paradise/constants/image_file_types.rb +27 -0
  537. data/lib/image_paradise/crop/crop.rb +429 -0
  538. data/lib/image_paradise/gm_support.rb +34 -0
  539. data/lib/image_paradise/graphs/accumulator_bar.rb +29 -0
  540. data/lib/image_paradise/graphs/area.rb +64 -0
  541. data/lib/image_paradise/graphs/bar.rb +117 -0
  542. data/lib/image_paradise/graphs/bar_conversion.rb +53 -0
  543. data/lib/image_paradise/graphs/base.rb +1392 -0
  544. data/lib/image_paradise/graphs/bezier.rb +45 -0
  545. data/lib/image_paradise/graphs/bullet.rb +115 -0
  546. data/lib/image_paradise/graphs/deprecated.rb +42 -0
  547. data/lib/image_paradise/graphs/dot.rb +129 -0
  548. data/lib/image_paradise/graphs/line.rb +328 -0
  549. data/lib/image_paradise/graphs/mini/bar.rb +42 -0
  550. data/lib/image_paradise/graphs/mini/legend.rb +109 -0
  551. data/lib/image_paradise/graphs/mini/pie.rb +42 -0
  552. data/lib/image_paradise/graphs/mini/side_bar.rb +41 -0
  553. data/lib/image_paradise/graphs/net.rb +133 -0
  554. data/lib/image_paradise/graphs/photo_bar.rb +106 -0
  555. data/lib/image_paradise/graphs/pie.rb +139 -0
  556. data/lib/image_paradise/graphs/scatter.rb +264 -0
  557. data/lib/image_paradise/graphs/scene.rb +216 -0
  558. data/lib/image_paradise/graphs/side_bar.rb +144 -0
  559. data/lib/image_paradise/graphs/side_stacked_bar.rb +116 -0
  560. data/lib/image_paradise/graphs/spider.rb +163 -0
  561. data/lib/image_paradise/graphs/stacked_area.rb +73 -0
  562. data/lib/image_paradise/graphs/stacked_bar.rb +68 -0
  563. data/lib/image_paradise/graphs/stacked_mixin.rb +30 -0
  564. data/lib/image_paradise/graphs/themes.rb +117 -0
  565. data/lib/image_paradise/graphs.rb +36 -0
  566. data/lib/image_paradise/graphviz/README.md +2 -0
  567. data/lib/image_paradise/graphviz/generate_graphviz_image.rb +276 -0
  568. data/lib/image_paradise/gui/gtk3/cfdg_widget/cfdg_widget.rb +1452 -0
  569. data/lib/image_paradise/gui/gtk3/cfdg_widget/connect_skeleton.rb +46 -0
  570. data/lib/image_paradise/gui/gtk3/image_editor/connect_skeleton.rb +126 -0
  571. data/lib/image_paradise/gui/gtk3/image_editor/image_editor.rb +2003 -0
  572. data/lib/image_paradise/identify.rb +184 -0
  573. data/lib/image_paradise/image_paradise.rb +153 -0
  574. data/lib/image_paradise/image_to_ascii/image_to_ascii.rb +187 -0
  575. data/lib/image_paradise/image_to_pdf/image_to_pdf.rb +99 -0
  576. data/lib/image_paradise/label/README.md +2 -0
  577. data/lib/image_paradise/label/simple_label.rb +206 -0
  578. data/lib/image_paradise/logo/IMGUR_LOGO.png +0 -0
  579. data/lib/image_paradise/project/project.rb +30 -0
  580. data/lib/image_paradise/requires/common_base_requires.rb +17 -0
  581. data/lib/image_paradise/requires/require_colours.rb +9 -0
  582. data/lib/image_paradise/requires/require_gtk_components.rb +8 -0
  583. data/lib/image_paradise/requires/require_image_to_ascii.rb +7 -0
  584. data/lib/image_paradise/requires/require_the_image_paradise_project.rb +42 -0
  585. data/lib/image_paradise/requires/require_toplevel_methods.rb +21 -0
  586. data/lib/image_paradise/rotate/README.md +2 -0
  587. data/lib/image_paradise/rotate/rotate.rb +124 -0
  588. data/lib/image_paradise/shell/interactive.rb +156 -0
  589. data/lib/image_paradise/svg/README.md +5 -0
  590. data/lib/image_paradise/svg/circle.rb +106 -0
  591. data/lib/image_paradise/svg/feature.rb +48 -0
  592. data/lib/image_paradise/svg/rectangle.rb +154 -0
  593. data/lib/image_paradise/svg/svg.rb +102 -0
  594. data/lib/image_paradise/toplevel_methods/add_black_border_to_this_image.rb +94 -0
  595. data/lib/image_paradise/toplevel_methods/create_animated_gif.rb +49 -0
  596. data/lib/image_paradise/toplevel_methods/crop.rb +29 -0
  597. data/lib/image_paradise/toplevel_methods/e.rb +16 -0
  598. data/lib/image_paradise/toplevel_methods/esystem.rb +19 -0
  599. data/lib/image_paradise/toplevel_methods/extract_text_from_this_image.rb +56 -0
  600. data/lib/image_paradise/toplevel_methods/file_related_code.rb +110 -0
  601. data/lib/image_paradise/toplevel_methods/flip_image_left_right.rb +59 -0
  602. data/lib/image_paradise/toplevel_methods/font_related_methods.rb +62 -0
  603. data/lib/image_paradise/toplevel_methods/greyscale_this_image.rb +76 -0
  604. data/lib/image_paradise/toplevel_methods/gui.rb +19 -0
  605. data/lib/image_paradise/toplevel_methods/help.rb +30 -0
  606. data/lib/image_paradise/toplevel_methods/interlace.rb +33 -0
  607. data/lib/image_paradise/toplevel_methods/is_an_image_file.rb +18 -0
  608. data/lib/image_paradise/toplevel_methods/make_this_image_transparent.rb +40 -0
  609. data/lib/image_paradise/toplevel_methods/menu.rb +110 -0
  610. data/lib/image_paradise/toplevel_methods/merge_these_images.rb +49 -0
  611. data/lib/image_paradise/toplevel_methods/mirror_image.rb +28 -0
  612. data/lib/image_paradise/toplevel_methods/misc.rb +1603 -0
  613. data/lib/image_paradise/toplevel_methods/negate.rb +36 -0
  614. data/lib/image_paradise/toplevel_methods/png_to_svg.rb +38 -0
  615. data/lib/image_paradise/toplevel_methods/quality.rb +34 -0
  616. data/lib/image_paradise/toplevel_methods/resized.rb +43 -0
  617. data/lib/image_paradise/toplevel_methods/roebe.rb +440 -0
  618. data/lib/image_paradise/toplevel_methods/thumbnail.rb +54 -0
  619. data/lib/image_paradise/toplevel_methods/to_png.rb +106 -0
  620. data/lib/image_paradise/toplevel_methods/wallpaper.rb +51 -0
  621. data/lib/image_paradise/toplevel_methods/write_this_text.rb +89 -0
  622. data/lib/image_paradise/utility_scripts/black_white.rb +92 -0
  623. data/lib/image_paradise/utility_scripts/create_new_image.rb +110 -0
  624. data/lib/image_paradise/utility_scripts/image_border.rb +226 -0
  625. data/lib/image_paradise/utility_scripts/image_gallery/image_gallery.rb +305 -0
  626. data/lib/image_paradise/utility_scripts/image_manipulations.rb +316 -0
  627. data/lib/image_paradise/utility_scripts/magic_card_border.rb +215 -0
  628. data/lib/image_paradise/utility_scripts/optimizer.rb +444 -0
  629. data/lib/image_paradise/utility_scripts/random_text_to_image.rb +364 -0
  630. data/lib/image_paradise/utility_scripts/text_on_image.rb +311 -0
  631. data/lib/image_paradise/utility_scripts/to_gif.rb +93 -0
  632. data/lib/image_paradise/utility_scripts/to_jpg.rb +82 -0
  633. data/lib/image_paradise/version/version.rb +19 -0
  634. data/lib/image_paradise/www/cfdg.cgi +25 -0
  635. data/lib/image_paradise/www/imagemagick/imagemagick.cgi +266 -0
  636. data/lib/image_paradise/yaml/README.md +2 -0
  637. data/lib/image_paradise/yaml/arc.yml +0 -0
  638. data/lib/image_paradise/yaml/circle.yml +6 -0
  639. data/lib/image_paradise/yaml/rectangle.yml +6 -0
  640. data/lib/image_paradise.rb +5 -0
  641. data/test/16x16_red_square_image_for_testing.png +0 -0
  642. data/test/misc/README.md +3 -0
  643. data/test/misc/testing_filling_up_with_circles.rb +65 -0
  644. data/test/testing_confree_generator.rb +8 -0
  645. data/test/testing_crop.rb +19 -0
  646. data/test/testing_image_magick_commands.rb +39 -0
  647. data/test/testing_image_paradise.rb +49 -0
  648. data/test/testing_the_svg_component.html +261 -0
  649. data/test/testing_the_svg_component.rb +106 -0
  650. metadata +762 -0
@@ -0,0 +1,793 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === ImageParadise::ConfreeGenerator
6
+ #
7
+ # The main task of this class is to generate a .png file from an existing
8
+ # .cfdg file. Alternatively, the batch-mode allows this class to generate
9
+ # lots of .png files from all existing .cfdg files.
10
+ #
11
+ # Usage example:
12
+ #
13
+ # ImageParadise::ConfreeGenerator.new(ARGV)
14
+ #
15
+ # =========================================================================== #
16
+ # require 'image_paradise/confree_generator/confree_generator.rb'
17
+ # ImageParadise.confreegenerator(ARGV)
18
+ # =========================================================================== #
19
+ require 'image_paradise/base/base.rb'
20
+ require 'image_paradise/confree_generator/constants.rb'
21
+
22
+ module ImageParadise
23
+
24
+ class ConfreeGenerator < ::ImageParadise::Base # === ImageParadise::ConfreeGenerator
25
+
26
+ begin
27
+ require 'open_in_browser'
28
+ rescue LoadError; end
29
+
30
+ begin
31
+ require 'web_object/toplevel_methods/standalone_drag_and_drop_this_image.rb'
32
+ rescue LoadError; end
33
+
34
+ # ========================================================================= #
35
+ # === initialize
36
+ # ========================================================================= #
37
+ def initialize(
38
+ commandline_arguments = nil,
39
+ run_already = true
40
+ )
41
+ register_sigint
42
+ reset
43
+ set_commandline_arguments(
44
+ commandline_arguments
45
+ )
46
+ # ======================================================================= #
47
+ # === Handle blocks given to this class next
48
+ # ======================================================================= #
49
+ if block_given?
50
+ yielded = yield
51
+ case yielded
52
+ # ===================================================================== #
53
+ # === :do_not_open_via_the_browser
54
+ # ===================================================================== #
55
+ when :do_not_open_via_the_browser
56
+ @try_to_open_the_generated_image_in_the_browser = false
57
+ else
58
+ # =================================================================== #
59
+ # === Handle Hashes next
60
+ # =================================================================== #
61
+ if yielded.is_a? Hash
62
+ # ================================================================= #
63
+ # === :open_in_browser_tab
64
+ # ================================================================= #
65
+ if yielded.has_key? :open_in_browser_tab
66
+ set_open_in_browser_tab(
67
+ yielded[:open_in_browser_tab]
68
+ )
69
+ end
70
+ # ================================================================= #
71
+ # === :output_location
72
+ # ================================================================= #
73
+ if yielded.has_key? :output_location
74
+ output_location = yielded[:output_location]
75
+ set_location_of_output_file(output_location)
76
+ @may_we_modify_the_location_of_the_output_file = false
77
+ end
78
+ # ================================================================= #
79
+ # === :width
80
+ # ================================================================= #
81
+ if yielded.has_key? :width
82
+ set_width(yielded[:width])
83
+ end
84
+ # ================================================================= #
85
+ # === :height
86
+ # ================================================================= #
87
+ if yielded.has_key? :height
88
+ set_height(yielded[:height])
89
+ end
90
+ end
91
+ end
92
+ end
93
+ run if run_already
94
+ end
95
+
96
+ # ========================================================================= #
97
+ # === reset (reset tag)
98
+ # ========================================================================= #
99
+ def reset
100
+ super()
101
+ infer_the_namespace
102
+ set_width_then_height(
103
+ DEFAULT_WIDTH,
104
+ DEFAULT_HEIGHT
105
+ )
106
+ # ======================================================================= #
107
+ # === @may_we_generate_the_image
108
+ #
109
+ # The next flag can be true or false.
110
+ #
111
+ # By default it should be true. If it is true, we will generate the
112
+ # image in question. Sometimes though, we may only want to generate
113
+ # the HTML code - that is why this variable exists.
114
+ # ======================================================================= #
115
+ @may_we_generate_the_image = MAY_WE_GENERATE_THE_IMAGE
116
+ # ======================================================================= #
117
+ # === @store_into_this_file
118
+ #
119
+ # This variable will keep track into which local .html file we will
120
+ # generate into.
121
+ #
122
+ # By default it will point at:
123
+ #
124
+ # /Depot/Images/index.html
125
+ #
126
+ # ======================================================================= #
127
+ @store_into_this_file =
128
+ "#{DIRECTORY_FOR_THE_TEMPORARY_IMAGES}index.html"
129
+ # ======================================================================= #
130
+ # === @create_a_html_gallery
131
+ #
132
+ # If true, we create a html gallery. This is usually the default
133
+ # mode for the --batch commandline flag.
134
+ # ======================================================================= #
135
+ @create_a_html_gallery = CREATE_A_HTML_GALLERY
136
+ # ======================================================================= #
137
+ # === @operate_in_this_mode
138
+ #
139
+ # This variable can be:
140
+ #
141
+ # :commandline
142
+ # :batch
143
+ # :GUI
144
+ #
145
+ # ======================================================================= #
146
+ @operate_in_this_mode = :commandline
147
+ # ======================================================================= #
148
+ # === @try_to_open_the_generated_image_in_the_browser
149
+ # ======================================================================= #
150
+ @try_to_open_the_generated_image_in_the_browser =
151
+ TRY_TO_OPEN_THE_GENERATED_IMAGE_IN_THE_BROWSER
152
+ # ======================================================================= #
153
+ # === @n_image_files
154
+ #
155
+ # This variable will keep track of the current index of image files.
156
+ # ======================================================================= #
157
+ @n_image_files = 0
158
+ # ======================================================================= #
159
+ # === @output_file
160
+ #
161
+ # Designate the main output-file, an image file, here.
162
+ # ======================================================================= #
163
+ @output_file = NAME_OF_OUTPUT_FILE
164
+ # ======================================================================= #
165
+ # === @location_of_output_file
166
+ #
167
+ # This will either be nil, or contain the absolute path to the
168
+ # generated image file.
169
+ # ======================================================================= #
170
+ @location_of_output_file = nil
171
+ # ======================================================================= #
172
+ # === @may_we_modify_the_location_of_the_output_file
173
+ # ======================================================================= #
174
+ @may_we_modify_the_location_of_the_output_file = true
175
+ # ======================================================================= #
176
+ # === @an_error_was_encountered
177
+ # ======================================================================= #
178
+ @an_error_was_encountered = false
179
+ end
180
+
181
+ # ========================================================================= #
182
+ # === set_open_in_browser_tab
183
+ # ========================================================================= #
184
+ def set_open_in_browser_tab(i)
185
+ @try_to_open_the_generated_image_in_the_browser = i
186
+ end
187
+
188
+ # ========================================================================= #
189
+ # === do_not_open_in_the_browser_tab
190
+ # ========================================================================= #
191
+ def do_not_open_in_the_browser_tab
192
+ @try_to_open_the_generated_image_in_the_browser = false
193
+ end
194
+
195
+ # ========================================================================= #
196
+ # === may_we_generate_the_image?
197
+ # ========================================================================= #
198
+ def may_we_generate_the_image?
199
+ @may_we_generate_the_image
200
+ end
201
+
202
+ # ========================================================================= #
203
+ # === store_into_this_file?
204
+ # ========================================================================= #
205
+ def store_into_this_file?
206
+ @store_into_this_file
207
+ end; alias html_file? store_into_this_file? # === html_file?
208
+
209
+ # ========================================================================= #
210
+ # === scan_this_file_for_width_and_height_values
211
+ # ========================================================================= #
212
+ def scan_this_file_for_width_and_height_values(i)
213
+ File.readlines(i).each {|line|
214
+ if line.include? ' WIDTH: '
215
+ # =================================================================== #
216
+ # Set the width next:
217
+ # =================================================================== #
218
+ set_width(
219
+ line.delete('#:').strip.sub(/WIDTH/,'')
220
+ )
221
+ elsif line.include? ' HEIGHT: '
222
+ # =================================================================== #
223
+ # Set the height next:
224
+ # =================================================================== #
225
+ set_height(
226
+ line.delete('#:').strip.sub(/HEIGHT/,'')
227
+ )
228
+ end
229
+ }
230
+ end
231
+
232
+ # ========================================================================= #
233
+ # === return_output_image_file_for
234
+ # ========================================================================= #
235
+ def return_output_image_file_for(
236
+ this_file = @output_file
237
+ )
238
+ if this_file
239
+ DIRECTORY_FOR_THE_TEMPORARY_IMAGES+
240
+ File.basename(this_file)+'.png' # Or use random_name(this_file)+'.png'
241
+ end
242
+ end
243
+
244
+ # ========================================================================= #
245
+ # === opnn
246
+ # ========================================================================= #
247
+ def opnn
248
+ Opn.opn(namespace: namespace?)
249
+ end
250
+
251
+ # ========================================================================= #
252
+ # === save_files_where?
253
+ # ========================================================================= #
254
+ def save_files_where?
255
+ DIRECTORY_FOR_THE_TEMPORARY_IMAGES
256
+ end
257
+
258
+ # ========================================================================= #
259
+ # === name_of_output_file?
260
+ # ========================================================================= #
261
+ def name_of_output_file?
262
+ NAME_OF_OUTPUT_FILE
263
+ end
264
+
265
+ # ========================================================================= #
266
+ # === check_whether_cfdg_is_installed
267
+ # ========================================================================= #
268
+ def check_whether_cfdg_is_installed
269
+ _ = `cfdg 2>&1` # => "sh: cfdg: command not found\n"
270
+ if _.include? 'cfdg: command not found'
271
+ e 'Note that you do not seem to have cfdg installed.'
272
+ e 'We will still continue nonetheless.'
273
+ end
274
+ end
275
+
276
+ # ======================================================================= #
277
+ # === set_width_then_height
278
+ #
279
+ # This method will first set the width, then the height.
280
+ # ======================================================================= #
281
+ def set_width_then_height(
282
+ width = 55,
283
+ height = nil
284
+ )
285
+ height = width if height.nil?
286
+ set_width(width)
287
+ set_height(height)
288
+ end
289
+
290
+ # ========================================================================= #
291
+ # === return_random_cfdg_file
292
+ #
293
+ # This method will obtain one random .cfdg file.
294
+ # ========================================================================= #
295
+ def return_random_cfdg_file(
296
+ i = DIRECTORY_WITH_CFDG_IMAGES
297
+ )
298
+ get_all_cfdg_files(i).sample
299
+ end; alias get_random_cfdg return_random_cfdg_file # === get_random_cfdg
300
+
301
+ # ========================================================================= #
302
+ # === toggle_may_we_generate_the_image
303
+ #
304
+ # This toggle switches between when we want to generate the image,
305
+ # and when we don't.
306
+ # ========================================================================= #
307
+ def toggle_may_we_generate_the_image
308
+ if generate_the_image?
309
+ e 'Setting to false - dont create images.'
310
+ else
311
+ e 'Setting to true - do create images.'
312
+ end
313
+ @may_we_generate_the_image = !@may_we_generate_the_image
314
+ end; alias change_flag toggle_may_we_generate_the_image # === change_flag
315
+
316
+ # ========================================================================= #
317
+ # === br
318
+ # ========================================================================= #
319
+ def br
320
+ '<br>'
321
+ end
322
+
323
+ # ========================================================================= #
324
+ # === random_name
325
+ #
326
+ # This method will return a string which consists of the input-string
327
+ # and 10 more random characters. We assume that for 10 random
328
+ # characters, there will be no double names.
329
+ #
330
+ # The result of this method is, for instance:
331
+ #
332
+ # "tube_map_jblhelce.png"
333
+ #
334
+ # Note that this may not be as important as it once used to be,
335
+ # past February 2021.
336
+ # ========================================================================= #
337
+ def random_name(i)
338
+ copy = i.to_s.dup
339
+ alphabet = ALPHABET # Build up the alphabet.
340
+ copy.gsub!(/\.cfdg/,'') # Don't like file ending here.
341
+ copy = File.basename(copy).dup
342
+ copy << '_'
343
+ 10.times { copy << alphabet.sample }
344
+ return copy
345
+ end
346
+
347
+ # ========================================================================= #
348
+ # === show_help (help tag)
349
+ #
350
+ # To invoke this help menu, do:
351
+ #
352
+ # congen HELP
353
+ #
354
+ # ========================================================================= #
355
+ def show_help
356
+ e
357
+ e ::Colours::YEL+"Currently this script has this usage:#{rev}"
358
+ e
359
+ eparse ' confreegen name_of_cfdg_file.cfdg'
360
+ e
361
+ eparse ' --toggle # Toggle whether we want to create the image or not.'
362
+ eparse ' --batch # run everything in batch mode (batch '\
363
+ 'processing) before creating a .html file'
364
+ eparse ' --html # an alias to the ^^ above'
365
+ eparse ' --gallery_only # generate only the gallery'
366
+ eparse ' --gui # start the GUI component of this project'
367
+ e
368
+ end
369
+
370
+ # ========================================================================= #
371
+ # === show_the_welcome_message
372
+ # ========================================================================= #
373
+ def show_the_welcome_message
374
+ opnn; e ::Colours.steelblue('Welcome!')
375
+ opnn; efancy ' => Handling data through class '\
376
+ 'ImageParadise::ConfreeGenerator next.'
377
+ end
378
+
379
+ # ========================================================================= #
380
+ # === notify_the_user_that_we_are_working_on_this_file_next
381
+ # ========================================================================= #
382
+ def notify_the_user_that_we_are_working_on_this_file_next(this_file)
383
+ if this_file and File.exist?(this_file)
384
+ opnn; e rev+'=> Working on the file '+sfile(this_file)+' next.'
385
+ end
386
+ end
387
+
388
+ # ========================================================================= #
389
+ # === set_output_file
390
+ # ========================================================================= #
391
+ def set_output_file(i)
392
+ @output_file = File.basename(i)
393
+ end; alias set_output_location set_output_file # === set_output_location
394
+
395
+ # ========================================================================= #
396
+ # === run_in_commandline_mode_or_in_batch_mode
397
+ # ========================================================================= #
398
+ def run_in_commandline_mode_or_in_batch_mode
399
+ case @operate_in_this_mode
400
+ # === :commandline
401
+ when :commandline
402
+ run_in_commandline_mode_for_a_single_file
403
+ # === :batch
404
+ when :batch
405
+ run_in_batch_mode
406
+ end
407
+ end
408
+
409
+ # ========================================================================= #
410
+ # === set_location_of_output_file
411
+ #
412
+ # This tells us where we store the output file.
413
+ # ========================================================================= #
414
+ def set_location_of_output_file(
415
+ i = :default
416
+ )
417
+ case i
418
+ when :default
419
+ i = DIRECTORY_FOR_THE_TEMPORARY_IMAGES+
420
+ @output_file
421
+ end
422
+ unless i.include? '/'
423
+ i = File.absolute_path(i)
424
+ end
425
+ @location_of_output_file = i
426
+ end; alias set_output_location set_location_of_output_file # === set_output_location
427
+ alias set_output set_location_of_output_file # === set_output
428
+
429
+ # ========================================================================= #
430
+ # === set_height
431
+ # ========================================================================= #
432
+ def set_height(i)
433
+ if i.is_a? String
434
+ i = i.dup if i.frozen?
435
+ i.strip!
436
+ end
437
+ @height = i.to_i
438
+ end
439
+
440
+ # ========================================================================= #
441
+ # === height?
442
+ # ========================================================================= #
443
+ def height?
444
+ @height
445
+ end
446
+
447
+ # ========================================================================= #
448
+ # === set_width
449
+ # ========================================================================= #
450
+ def set_width(i)
451
+ if i.is_a? String
452
+ i = i.dup if i.frozen?
453
+ i.strip!
454
+ end
455
+ @width = i.to_i
456
+ end
457
+
458
+ # ========================================================================= #
459
+ # === width?
460
+ # ========================================================================= #
461
+ def width?
462
+ @width
463
+ end
464
+
465
+ # ========================================================================= #
466
+ # === start_gui (gui tag)
467
+ #
468
+ # This method will start the GUI component.
469
+ #
470
+ # To start this, try:
471
+ #
472
+ # confree_generator --gui
473
+ #
474
+ # ========================================================================= #
475
+ def start_gui
476
+ require 'image_paradise/gui/gtk3/cfdg_widget/cfdg_widget.rb'
477
+ @gtk_confreegenerator = ImageParadise::GUI::Gtk::CfdgWidget.run
478
+ end
479
+
480
+ # ========================================================================= #
481
+ # === menu (menu tag)
482
+ #
483
+ # Usage examples:
484
+ #
485
+ # confgen change_flag
486
+ #
487
+ # Regular use:
488
+ #
489
+ # rfree $CFDG/spiral_star.cfdg
490
+ # rfree $CFDG/star.cfdg
491
+ #
492
+ # ========================================================================= #
493
+ def menu(
494
+ i = commandline_arguments?
495
+ )
496
+ if i.is_a? Array
497
+ i.each {|entry| menu(entry) }
498
+ else
499
+ case i # case tag
500
+ # ===================================================================== #
501
+ # === confreegen --batch
502
+ # ===================================================================== #
503
+ when /^-?-?batch$/,
504
+ /^-?-?batchmode$/,
505
+ /^-?-?html$/, # <- This alias may eventually be changed.
506
+ /^-?-?html(_|-)?gallery$/i,
507
+ 'gallery',
508
+ 'default',
509
+ 'b',
510
+ '2'
511
+ @operate_in_this_mode = :batch
512
+ # ===================================================================== #
513
+ # === confree_generator --gui
514
+ # ===================================================================== #
515
+ when /^-?-?gui$/i,
516
+ 'startgui',
517
+ 'start_gui',
518
+ '3'
519
+ start_gui
520
+ # ===================================================================== #
521
+ # === confree_generator --gallery-only
522
+ #
523
+ # We skip creating the images anew in this event.
524
+ # ===================================================================== #
525
+ when /^-?-?gallery(_|-)?only$/i
526
+ @may_we_generate_the_image = false
527
+ # ===================================================================== #
528
+ # === confree_generator --toggle
529
+ # ===================================================================== #
530
+ when '--toggle',
531
+ 'change',
532
+ 'change_flag',
533
+ 'c',
534
+ 'flag',
535
+ 'f',
536
+ 'fl',
537
+ 'fla',
538
+ 'generate_image',
539
+ 'toggle',
540
+ '1'
541
+ toggle_may_we_generate_the_image
542
+ # ===================================================================== #
543
+ # === confree_generator --random
544
+ # ===================================================================== #
545
+ when /^-?-?random$/i,
546
+ '4'
547
+ @commandline_arguments[0] = return_random_cfdg_file
548
+ # ===================================================================== #
549
+ # === confree_generator --help
550
+ # ===================================================================== #
551
+ when /^-?-?help$/i
552
+ show_help
553
+ exit
554
+ else
555
+ unless File.exist? i
556
+ opnn; e rev+'No file exists at '+sfile(i)+'.'
557
+ end
558
+ end
559
+ end
560
+ end
561
+
562
+ # ========================================================================= #
563
+ # === create_a_html_page (html tag)
564
+ #
565
+ # This may typically store into a file such as '/Depot/Images/index.html'.
566
+ # ========================================================================= #
567
+ def create_a_html_page(
568
+ into = @store_into_this_file
569
+ )
570
+ require 'save_file'
571
+ require 'cyberweb'
572
+ mkdir(File.dirname(into))
573
+ opnn; e "We will save into `#{sfile(into)}`."
574
+ all_image_files = Dir[DIRECTORY_FOR_THE_TEMPORARY_IMAGES+'*.png'].sort
575
+ # ======================================================================= #
576
+ # Store onto the _ variable.
577
+ # ======================================================================= #
578
+ _ = '<html><head><title>Confree-Images (CFDG Image Collection)</title></head><body>'.dup
579
+ all_image_files.each_with_index {|this_file, index|
580
+ @n_image_files += 1
581
+ # ===================================================================== #
582
+ # Add the <img> tag here.
583
+ # ===================================================================== #
584
+ id_for_this_image_file = File.basename(this_file).
585
+ sub(/#{File.extname(this_file)}$/,'')
586
+ _ << '<div>'
587
+ _ << Cyberweb.span(
588
+ 'The CFDG-File Name is:','','','font-size:0.95em'
589
+ ).dup+
590
+ '<br>'+N
591
+ _ << '<b>'+this_file+'</b>'
592
+ _ << "<img src=\"#{File.basename(this_file)}\" "\
593
+ "id=\"#{id_for_this_image_file}\" "\
594
+ "style=\"margin:5px; border:1px solid black\">"
595
+ _ << Cyberweb.standalone_drag_and_drop_this_image(id_for_this_image_file)+
596
+ N # img tag here.
597
+ _ << '</div>'
598
+ case index % 3
599
+ when 0
600
+ _ << "<br>\n"
601
+ end if index > 0
602
+ }
603
+ _ << br+' '+@n_image_files.to_s+' images files are handled in this .html file.'+N+br+br
604
+ _ << br+'Find more examples '
605
+ _ << '<a href="https://www.contextfreeart.org/downloads.html"><b>here</b></a>.<br>'
606
+ _ << br+'</body></html>'
607
+ File.delete(into) if File.exist? into
608
+ SaveFile.write_what_into(_, into)
609
+ if File.exist? into
610
+ require 'open'
611
+ opnn; e "Finished appending into `#{sfile(into)}`."
612
+ ::Open.in_browser(into)
613
+ end
614
+ end
615
+
616
+ # ========================================================================= #
617
+ # === run_in_batch_mode (batch tag)
618
+ #
619
+ # Invocation example:
620
+ #
621
+ # confreegen --batch
622
+ #
623
+ # ========================================================================= #
624
+ def run_in_batch_mode
625
+ e "#{rev}Running in batch-mode next."
626
+ @operate_in_this_mode = :batch
627
+ do_not_open_in_the_browser_tab
628
+ if @may_we_generate_the_image
629
+ @all_cfdg_files = Dir[DIRECTORY_CONTAINING_THE_CFDG_FILES+'*.cfdg']
630
+ @all_cfdg_files.each_with_index {|this_file, index| index += 1
631
+ # =================================================================== #
632
+ # Keep track of the current iteration number (index):
633
+ # =================================================================== #
634
+ opnn; e 'Iteration number: '+
635
+ ::Colours.lightblue("(#{index})").rjust(4)
636
+ opnn; e
637
+ opnn; e " #{::Colours.sfile(this_file)}"
638
+ opnn; e
639
+ set_width_then_height(USE_THIS_WIDTH_AND_HEIGHT) # This is the same size for both.
640
+ let_the_cfdg_binary_work_on_this_file(this_file)
641
+ }
642
+ end
643
+ create_a_html_page
644
+ end
645
+
646
+ # ========================================================================= #
647
+ # === try_to_open_the_file_in_a_browser_tab_if_it_exists_locally
648
+ # ========================================================================= #
649
+ def try_to_open_the_file_in_a_browser_tab_if_it_exists_locally(
650
+ i = @location_of_output_file
651
+ )
652
+ if i and @try_to_open_the_generated_image_in_the_browser and File.exist?(i)
653
+ Open.in_browser(i)
654
+ end
655
+ end
656
+
657
+ # ========================================================================= #
658
+ # === let_the_cfdg_binary_work_on_this_file
659
+ # ========================================================================= #
660
+ def let_the_cfdg_binary_work_on_this_file(
661
+ this_file = first_argument?,
662
+ may_we_modify_the_location_of_the_output_file = @may_we_modify_the_location_of_the_output_file
663
+ )
664
+ # ======================================================================= #
665
+ # Notify the user on which .cfdg file this class will work on next.
666
+ # ======================================================================= #
667
+ notify_the_user_that_we_are_working_on_this_file_next(this_file)
668
+ target = return_output_image_file_for(this_file)
669
+ set_output_file(target)
670
+ if may_we_modify_the_location_of_the_output_file
671
+ # ===================================================================== #
672
+ # This is done because the ruby-gtk3 GUI wrapper needs to determine
673
+ # its own full path to the generated .png file at hand.
674
+ # ===================================================================== #
675
+ set_location_of_output_file(target)
676
+ end
677
+ reset_the_error_tracker
678
+ try_to_invoke_the_cfdg_binary_if_an_argument_was_given(this_file)
679
+ try_to_open_the_file_in_a_browser_tab_if_it_exists_locally
680
+ end; alias run_in_commandline_mode_for_a_single_file let_the_cfdg_binary_work_on_this_file # === run_in_commandline_mode_for_a_single_file
681
+
682
+ # ========================================================================= #
683
+ # === reset_the_error_tracker
684
+ # ========================================================================= #
685
+ def reset_the_error_tracker
686
+ @an_error_was_encountered = false
687
+ end
688
+
689
+ # ========================================================================= #
690
+ # === an_error_was_encountered?
691
+ # ========================================================================= #
692
+ def an_error_was_encountered?
693
+ @an_error_was_encountered
694
+ end; alias error? an_error_was_encountered? # === error?
695
+ alias was_an_error_encountered? an_error_was_encountered? # === was_an_error_encountered?
696
+
697
+ # ========================================================================= #
698
+ # === try_to_invoke_the_cfdg_binary_if_an_argument_was_given (system tag)
699
+ #
700
+ # This method will actually create the image-file, by shelling out to the
701
+ # "cfdg" binary. Additionally we may also optimize the generated .png
702
+ # file, via "pngquant", to minimize its size.
703
+ # ========================================================================= #
704
+ def try_to_invoke_the_cfdg_binary_if_an_argument_was_given(
705
+ i = first_argument_without_hyphen?,
706
+ may_we_generate_the_image = @may_we_generate_the_image
707
+ )
708
+ if i and File.exist?(i)
709
+ scan_this_file_for_width_and_height_values(i)
710
+ # ===================================================================== #
711
+ # We depend on @location_of_output_file being correctly set next.
712
+ # ===================================================================== #
713
+ _ = "cfdg #{i}".dup
714
+ _ << ' --bordersize=1' # This means border size. For now this is hardcoded.
715
+ _ << " -w #{width?}"
716
+ _ << " -h #{height?}"
717
+ # _ << '-a 10'
718
+ _ << " #{@location_of_output_file}"
719
+ e _
720
+ if may_we_generate_the_image
721
+ result = `#{_} 2>&1`
722
+ if result.include? 'error: syntax error'
723
+ @an_error_was_encountered = true
724
+ end
725
+ end
726
+ # ===================================================================== #
727
+ # === Optimize via pngquant
728
+ # ===================================================================== #
729
+ if OPTIMIZE_THE_PNG_FILES and File.exist?(@output_file)
730
+ File.delete('output-fs8.png') if File.exist? 'output-fs8.png'
731
+ # =================================================================== #
732
+ # Optimize the generated .png file.
733
+ # =================================================================== #
734
+ optimize_string = 'pngquant -f --ext .png '+@location_of_output_file
735
+ e "#{rev}Next running #{sfancy('pngquant')} to reduce the size "\
736
+ "of the .png file at hand."
737
+ e
738
+ e sfancy(" #{optimize_string}")
739
+ e
740
+ system(optimize_string)
741
+ end
742
+ end
743
+ end; alias create_image_from_cfdg try_to_invoke_the_cfdg_binary_if_an_argument_was_given # === create_image_from_cfdg
744
+
745
+ # ========================================================================= #
746
+ # === run (run tag)
747
+ # ========================================================================= #
748
+ def run
749
+ check_whether_cfdg_is_installed
750
+ show_the_welcome_message
751
+ menu
752
+ run_in_commandline_mode_or_in_batch_mode
753
+ end
754
+
755
+ # ========================================================================= #
756
+ # === ImageParadise::ConfreeGenerator[]
757
+ # ========================================================================= #
758
+ def self.[](i = ARGV)
759
+ new(i)
760
+ end
761
+
762
+ # ========================================================================= #
763
+ # === ImageParadise::ConfreeGenerator.batch_generate_all_images
764
+ # ========================================================================= #
765
+ def self.batch_generate_all_images
766
+ ::ImageParadise::ConfreeGenerator.new('--batchmode')
767
+ end
768
+
769
+ end
770
+
771
+ # =========================================================================== #
772
+ # === ImageParadise.confreegenerator
773
+ # =========================================================================== #
774
+ def self.confreegenerator(
775
+ i = ARGV, &block
776
+ )
777
+ ::ImageParadise::ConfreeGenerator.new(i, &block)
778
+ end
779
+
780
+ # =========================================================================== #
781
+ # === ImageParadise.batch_generate_the_cfdg_files
782
+ #
783
+ # This method will batch-generate from the existing .cfdg files.
784
+ # =========================================================================== #
785
+ def self.batch_generate_the_cfdg_files
786
+ ::ImageParadise::ConfreeGenerator.new('--batch')
787
+ end
788
+
789
+ end
790
+
791
+ if __FILE__ == $PROGRAM_NAME
792
+ ImageParadise::ConfreeGenerator.new(ARGV)
793
+ end # confreegenerator