tily.rb 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
 - data/README.md +4 -0
 - data/bin/tily +28 -0
 - data/lib/tily.rb +15 -9
 - data/lib/tily/utils/tile_system.rb +15 -1
 - data/lib/tily/version.rb +1 -1
 - data/spec/utils/tile_system_spec.rb +4 -0
 - data/tily-rb.gemspec +1 -0
 - metadata +17 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e43703a29d2e8c65d37d9263ca47884a855b3936
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: dd16597b6d806cb4faa7ad822c65e41b5da12232
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b1a702b645b1ab26ecda344ce8e7b12b4954fbb5e3a48d5f05aaf34051c7e4ce9fc56562b3d87b23a762401773603c234fde1b891b062b79cb37777f6bcd2e41
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: e2ae5fb85a1cac7f050d5e9368c5498f4b657a376b3088d7ba2f7b0d75df9a29c0696e2b5a73303756a78c2f0ff33a4d1bd8fccea96f865c07eb40e3363fef83
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,4 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            tily.rb
         
     | 
| 
       2 
2 
     | 
    
         
             
            =======
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            ## Status
         
     | 
| 
      
 5 
     | 
    
         
            +
            [](https://travis-ci.org/void-main/tily.rb)
         
     | 
| 
      
 6 
     | 
    
         
            +
            [](http://badge.fury.io/rb/tily.rb)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       4 
8 
     | 
    
         
             
            Map tile generator with ruby.
         
     | 
    
        data/bin/tily
    ADDED
    
    | 
         @@ -0,0 +1,28 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'trollop'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require '../lib/tily'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require '../lib/tily/version'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
      
 8 
     | 
    
         
            +
              version "Tily #{Tily::VERSION} (c) 2013 Peng Sun"
         
     | 
| 
      
 9 
     | 
    
         
            +
              banner <<-EOS
         
     | 
| 
      
 10 
     | 
    
         
            +
            A simple map tile generator that divides huge images into classifed levels, with small tile images.
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            Usage:
         
     | 
| 
      
 13 
     | 
    
         
            +
                   tily [options]
         
     | 
| 
      
 14 
     | 
    
         
            +
            where [options] are:
         
     | 
| 
      
 15 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              opt :img_path,    "Path to the huge image", :long => "src", :short => "s", :type => :string
         
     | 
| 
      
 18 
     | 
    
         
            +
              opt :output_path, "Root path to the output folder", :long => "dest", :short => "d", :type => :string
         
     | 
| 
      
 19 
     | 
    
         
            +
              opt :unit_size,   "Size of the unit tile", :long => "unitsize", :short => "u", :type => :int, :default => 256
         
     | 
| 
      
 20 
     | 
    
         
            +
              opt :bg_color,    "Color of the expanded part of the image", :long => "background", :short => "b", :type => :string, :default => "grey"
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            Trollop::die :img_path, "must not be null" unless opts[:img_path]
         
     | 
| 
      
 24 
     | 
    
         
            +
            Trollop::die :img_path, "must exists" unless File.exist?(opts[:img_path])
         
     | 
| 
      
 25 
     | 
    
         
            +
            Trollop::die :output_path, "must not be null" unless opts[:output_path]
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            tily = Tily::Tily.new opts
         
     | 
| 
      
 28 
     | 
    
         
            +
            tily.gen_tiles
         
     | 
    
        data/lib/tily.rb
    CHANGED
    
    | 
         @@ -1,7 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'rmagick'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'FileUtils'
         
     | 
| 
       4 
     | 
    
         
            -
            require ' 
     | 
| 
      
 4 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative './tily/utils/tile_system'
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            include Magick
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
         @@ -12,12 +13,19 @@ module Tily 
     | 
|
| 
       12 
13 
     | 
    
         
             
            		attr_accessor :ts
         
     | 
| 
       13 
14 
     | 
    
         
             
            		attr_accessor :background_color
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            		def initialize  
     | 
| 
      
 16 
     | 
    
         
            +
            		def initialize opts
         
     | 
| 
      
 17 
     | 
    
         
            +
            			img_path = opts[:img_path]
         
     | 
| 
      
 18 
     | 
    
         
            +
            			output_path = opts[:output_path]
         
     | 
| 
      
 19 
     | 
    
         
            +
            			unit_size = opts[:unit_size] || 256
         
     | 
| 
      
 20 
     | 
    
         
            +
            			background_color = opts[:bg_color] || "grey"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       16 
22 
     | 
    
         
             
            			@raw_image = ImageList.new img_path
         
     | 
| 
       17 
23 
     | 
    
         
             
            			@output_path = output_path
         
     | 
| 
       18 
24 
     | 
    
         
             
            			@ts = TileSystem.new unit_size
         
     | 
| 
       19 
25 
     | 
    
         
             
            			@ts.read_raw_dimension @raw_image.columns, @raw_image.rows
         
     | 
| 
       20 
26 
     | 
    
         
             
            			@background_color = background_color
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            			FileUtils.mkdir_p @output_path unless Dir.exists? @output_path
         
     | 
| 
       21 
29 
     | 
    
         
             
            		end
         
     | 
| 
       22 
30 
     | 
    
         | 
| 
       23 
31 
     | 
    
         
             
            		def gen_tiles
         
     | 
| 
         @@ -25,6 +33,10 @@ module Tily 
     | 
|
| 
       25 
33 
     | 
    
         
             
            			base_img = Image.new(norm_size, norm_size) { self.background_color = "grey" }
         
     | 
| 
       26 
34 
     | 
    
         
             
            			base_img = base_img.composite(@raw_image, GravityType::CenterGravity, CompositeOperator::CopyCompositeOp)
         
     | 
| 
       27 
35 
     | 
    
         | 
| 
      
 36 
     | 
    
         
            +
            			puts "Generating meta-data..."
         
     | 
| 
      
 37 
     | 
    
         
            +
            			File.open("#{@output_path}/meta.json", "w") {|f| f.write(@ts.meta.to_json) }
         
     | 
| 
      
 38 
     | 
    
         
            +
            			puts "Done."
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
       28 
40 
     | 
    
         
             
            			puts "Generating images..."
         
     | 
| 
       29 
41 
     | 
    
         | 
| 
       30 
42 
     | 
    
         
             
            			@ts.each_level do |level|
         
     | 
| 
         @@ -33,7 +45,7 @@ module Tily 
     | 
|
| 
       33 
45 
     | 
    
         
             
            				level_folder = "#{@output_path}/#{level}"
         
     | 
| 
       34 
46 
     | 
    
         
             
            				FileUtils.mkdir_p level_folder unless Dir.exists? level_folder
         
     | 
| 
       35 
47 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
            				level_size = @ts. 
     | 
| 
      
 48 
     | 
    
         
            +
            				level_size = @ts.level_size level
         
     | 
| 
       37 
49 
     | 
    
         
             
            				level_img  = base_img.resize level_size, level_size
         
     | 
| 
       38 
50 
     | 
    
         | 
| 
       39 
51 
     | 
    
         
             
            				@ts.each_tile_with_index(level) do |x, y, index|
         
     | 
| 
         @@ -56,9 +68,3 @@ module Tily 
     | 
|
| 
       56 
68 
     | 
    
         
             
            		end
         
     | 
| 
       57 
69 
     | 
    
         
             
            	end
         
     | 
| 
       58 
70 
     | 
    
         
             
            end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
            #img_path = "/Users/voidmain/Desktop/el-mundo.jpg"
         
     | 
| 
       62 
     | 
    
         
            -
            #target_path = "#{Dir.home()}/Desktop/el-mundo"
         
     | 
| 
       63 
     | 
    
         
            -
            #tily = Tily::Tily.new img_path, target_path
         
     | 
| 
       64 
     | 
    
         
            -
            #tily.gen_tiles
         
     | 
| 
         @@ -44,6 +44,11 @@ module Tily 
     | 
|
| 
       44 
44 
     | 
    
         
             
            			2 ** level
         
     | 
| 
       45 
45 
     | 
    
         
             
            		end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
            		# Returns the size of the level image
         
     | 
| 
      
 48 
     | 
    
         
            +
            		def level_size level
         
     | 
| 
      
 49 
     | 
    
         
            +
            			@unit_size * tile_size(level)
         
     | 
| 
      
 50 
     | 
    
         
            +
            		end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       47 
52 
     | 
    
         
             
            		# Returns the pixel offset in the image
         
     | 
| 
       48 
53 
     | 
    
         
             
            		def tile_offset index
         
     | 
| 
       49 
54 
     | 
    
         
             
            			@unit_size * index
         
     | 
| 
         @@ -85,12 +90,21 @@ module Tily 
     | 
|
| 
       85 
90 
     | 
    
         
             
            			(0...size).each do |y|
         
     | 
| 
       86 
91 
     | 
    
         
             
            				(0...size).each do |x|
         
     | 
| 
       87 
92 
     | 
    
         
             
            					yield(x, y, idx) if block_given?
         
     | 
| 
       88 
     | 
    
         
            -
            										$stdout.flush
         
     | 
| 
       89 
93 
     | 
    
         
             
            					idx += 1
         
     | 
| 
       90 
94 
     | 
    
         
             
            				end
         
     | 
| 
       91 
95 
     | 
    
         
             
            			end
         
     | 
| 
       92 
96 
     | 
    
         
             
            		end
         
     | 
| 
       93 
97 
     | 
    
         | 
| 
      
 98 
     | 
    
         
            +
            		# Generates meta info for current TileSystem
         
     | 
| 
      
 99 
     | 
    
         
            +
            		def meta
         
     | 
| 
      
 100 
     | 
    
         
            +
            			{
         
     | 
| 
      
 101 
     | 
    
         
            +
            				total_level: max_level, 
         
     | 
| 
      
 102 
     | 
    
         
            +
            				unit_size:   @unit_size,
         
     | 
| 
      
 103 
     | 
    
         
            +
            				raw_width:   @raw_width, 
         
     | 
| 
      
 104 
     | 
    
         
            +
            				raw_height:  @raw_height
         
     | 
| 
      
 105 
     | 
    
         
            +
            			}
         
     | 
| 
      
 106 
     | 
    
         
            +
            		end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
       94 
108 
     | 
    
         
             
            		private
         
     | 
| 
       95 
109 
     | 
    
         
             
            		# Calculate level size from raw size with the following fomula:
         
     | 
| 
       96 
110 
     | 
    
         
             
            		#    level = ceil(log2(raw size / unit_size))
         
     | 
    
        data/lib/tily/version.rb
    CHANGED
    
    
| 
         @@ -23,6 +23,10 @@ describe Tily::TileSystem do 
     | 
|
| 
       23 
23 
     | 
    
         
             
                @ts.tile_size(4).should == 2 ** 4
         
     | 
| 
       24 
24 
     | 
    
         
             
              end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
              it 'should calculate level size correctly' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                @ts.level_size(4).should == 4096
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
       26 
30 
     | 
    
         
             
              it 'should calculate tile offset correctly' do
         
     | 
| 
       27 
31 
     | 
    
         
             
                @ts.tile_offset(2).should == 512
         
     | 
| 
       28 
32 
     | 
    
         
             
              end
         
     | 
    
        data/tily-rb.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: tily.rb
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Peng Sun
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2013-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2013-08-20 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rmagick
         
     | 
| 
         @@ -24,6 +24,20 @@ dependencies: 
     | 
|
| 
       24 
24 
     | 
    
         
             
                - - '>='
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
26 
     | 
    
         
             
                    version: 2.13.2
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: trollop
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - '>='
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - '>='
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       27 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
42 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -67,6 +81,7 @@ files: 
     | 
|
| 
       67 
81 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       68 
82 
     | 
    
         
             
            - README.md
         
     | 
| 
       69 
83 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 84 
     | 
    
         
            +
            - bin/tily
         
     | 
| 
       70 
85 
     | 
    
         
             
            - lib/tily.rb
         
     | 
| 
       71 
86 
     | 
    
         
             
            - lib/tily/utils/tile_system.rb
         
     | 
| 
       72 
87 
     | 
    
         
             
            - lib/tily/version.rb
         
     |