From: "Simon Kröger" Date: 2005-10-10T06:56:38+09:00 Subject: [SOLUTION] Text Image (#50) Hi, here is my attempt of solving this weeks quiz: This solution uses the RMagick lib to read the image and to find edges because trying to find apropiate letters for halftoning is hard on all the different terminals. I had another version without the generator/enumerator stuff and it was a lot faster. But speed isn't an issue this week and it's so much smoother than fiddling with indexes. cheers Simon ---------------------------------------------------------------- require 'RMagick' require 'generator' require 'enumerator' puts "Usage: #{$0} [size]" or exit if !ARGV[0] img, size = Magick::ImageList.new(ARGV[0]), (ARGV[1]||40).to_f factor = [size*1.5/img.rows, size/img.columns].min img.resize!(img.columns*factor, 2*(img.rows*factor*0.75).round) img = img.edge.despeckle.despeckle.normalize.threshold(50) pixels = img.get_pixels(0, 0, img.columns, img.rows).map{|c| c.red.zero?} pixels.to_enum(:each_slice, img.columns).each_slice(2) do |l| puts SyncEnumerator.new(*l).map{|p1, p2| [' ', "'", ".", ":"] [(p1 ? 0 : 1) + (p2 ? 0 : 2)]}.join('') end ---------------------------------------------------------------- sample output: .:'''''''. .: :. .: :. : : :' ': .: : : .':. :: :'.' : .. ': : :..' :' ': : :. ' : .: : ': '::'':.. ':' . : :: ''.. :' .:'':. :: . ': .: ..' . '. ': ''''' .: .:::::''' :. :: .:': : .: : .:' : .' '' '' : :' : : : .' : : ' :' : .: ' : .: ' : : .: : .: : .' '. :' :. .' '. .:' ':. .:' ':. .:' ''..........''