ferencd@0: require 'fileutils' ferencd@0: ferencd@0: imgfile = "download.png" ferencd@0: target_dir = "work" ferencd@0: ferencd@0: imgfile = ARGV[0] if ARGV.length >= 1 ferencd@0: target_dir = ARGV[1] if ARGV.length >= 2 ferencd@0: ferencd@0: puts "working on image: #{imgfile} going into #{target_dir}" ferencd@0: ferencd@0: # Does it exist? ferencd@0: abort("#{imgfile} does not exist. Giving up.") if not File.exist?(imgfile) ferencd@0: ferencd@0: # Cutting the file into long pieces. ferencd@0: abort("#{imgfile} could not be split up into lines") if not system("convert #{imgfile} -crop 832x64 +repage +adjoin row_%02d.png") ferencd@0: ferencd@0: # Relocating all pieces into their own directory. ferencd@0: # The following is the list: ferencd@0: # 0 - Spell cast up - scu ferencd@0: # 1 - Spell cast left - scl ferencd@0: # 2 - Spell cast down - scd ferencd@0: # 3 - Spell cast right - scr ferencd@0: # 4 - Thrust up - tru ferencd@0: # 5 - Thrust left - trl ferencd@0: # 6 - Thrust down - trd ferencd@0: # 7 - Thrust right - trr ferencd@0: # 8 - Walk up - wlu ferencd@0: # 9 - Walk left - wll ferencd@0: # 10 - Walk down - wld ferencd@0: # 11 - Walk right - wlr ferencd@0: # 12 - Slash up - slu ferencd@0: # 13 - Slash left - sll ferencd@0: # 14 - Slash down - sld ferencd@0: # 15 - Slash right - slr ferencd@0: # 16 - Shoot up - shu ferencd@0: # 17 - Shoot left - shl ferencd@0: # 18 - Shoot down - shd ferencd@0: # 19 - Shoot right - shr ferencd@0: # 20 - Hurt - hrt ferencd@0: ferencd@0: maps = { ferencd@0: "00" => {:name => "scu", :count => 7, :base_name => "sc", :direction => "u"}, ferencd@0: "01" => {:name => "scl", :count => 7, :base_name => "sc", :direction => "l"}, ferencd@0: "02" => {:name => "scd", :count => 7, :base_name => "sc", :direction => "d"}, ferencd@0: "03" => {:name => "scr", :count => 7, :base_name => "sc", :direction => "r"}, ferencd@0: "04" => {:name => "tru", :count => 8, :base_name => "tr", :direction => "u"}, ferencd@0: "05" => {:name => "trl", :count => 8, :base_name => "tr", :direction => "l"}, ferencd@0: "06" => {:name => "trd", :count => 8, :base_name => "tr", :direction => "d"}, ferencd@0: "07" => {:name => "trr", :count => 8, :base_name => "tr", :direction => "r"}, ferencd@0: "08" => {:name => "wlu", :count => 9, :base_name => "wl", :direction => "u"}, ferencd@0: "09" => {:name => "wll", :count => 9, :base_name => "wl", :direction => "l"}, ferencd@0: "10" => {:name => "wld", :count => 9, :base_name => "wl", :direction => "d"}, ferencd@0: "11" => {:name => "wlr", :count => 9, :base_name => "wl", :direction => "r"}, ferencd@0: "12" => {:name => "slu", :count => 6, :base_name => "sl", :direction => "u"}, ferencd@0: "13" => {:name => "sll", :count => 6, :base_name => "sl", :direction => "l"}, ferencd@0: "14" => {:name => "sld", :count => 6, :base_name => "sl", :direction => "d"}, ferencd@0: "15" => {:name => "slr", :count => 6, :base_name => "sl", :direction => "r"}, ferencd@0: "16" => {:name => "shu", :count =>13, :base_name => "sh", :direction => "u"}, ferencd@0: "17" => {:name => "shl", :count =>13, :base_name => "sh", :direction => "l"}, ferencd@0: "18" => {:name => "shd", :count =>13, :base_name => "sh", :direction => "d"}, ferencd@0: "19" => {:name => "shr", :count =>13, :base_name => "sh", :direction => "r"}, ferencd@0: "20" => {:name => "hrt", :count => 6, :base_name => "hr", :direction => "t"} ferencd@0: } ferencd@0: ferencd@0: ferencd@0: # Prepare the work directory ferencd@0: abort("Cannot create #{target_dir}") if not FileUtils::mkdir_p "#{target_dir}" ferencd@0: ferencd@0: maps.each do |key, value_map| ferencd@0: ferencd@0: # Create the directory where the file will go ferencd@0: current_target_dir = target_dir + "/" + value_map[:base_name] ferencd@0: abort("Cannot create #{current_target_dir} dir") if not FileUtils::mkdir_p "#{current_target_dir}" ferencd@0: ferencd@0: # The current file ferencd@0: current_file = "row_#{key}.png" ferencd@0: FileUtils.mv(current_file, "#{current_target_dir}") ferencd@0: ferencd@0: #Save current location ferencd@0: current_dir = Dir.pwd ferencd@0: ferencd@0: # Create the template of the outcoming files ferencd@0: target_filenames = value_map[:direction] + "_" + value_map[:base_name] + "_%01d.png" ferencd@0: # now go into the directory and chop up the images ferencd@0: Dir.chdir(current_target_dir) ferencd@0: abort("Cannot chop up #{current_file}") if not system("convert #{current_file} -crop 64x64 +repage +adjoin -scene 1 #{target_filenames}") ferencd@0: ferencd@0: # Now remove all files that are after count ferencd@0: (value_map[:count] + 1 .. 13).each do |num| ferencd@0: to_delete_filename = value_map[:direction] + "_" + value_map[:base_name] + "_" + num.to_s + ".png" ferencd@0: FileUtils.rm(to_delete_filename) ferencd@0: end ferencd@0: ferencd@0: # remove current file ferencd@0: FileUtils.rm(current_file) ferencd@0: ferencd@0: # And resize everything in the current directory to 32x32 ferencd@0: abort("Cannot mogrify") if not system("mogrify -geometry x32 *.png") ferencd@0: ferencd@0: # Let's go home, fetch the next file ferencd@0: Dir.chdir(current_dir) ferencd@0: end ferencd@0: ferencd@0: