image_paradise 0.4.8

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