tileup 0.1.3 → 0.1.4

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.
@@ -0,0 +1,34 @@
1
+ Tileup Change Log
2
+ =================
3
+
4
+ v0.1.4
5
+ ------
6
+
7
+ - Fix: Background color for extended tiles (now transparent instead of white,
8
+ which would clobber transparent backgrounds)
9
+
10
+ v0.1.3
11
+ ------
12
+
13
+ - New: Functionality to automatically pad tiles that are not tile_width x tile_height
14
+ - New: CLI switch to disable functionality (`dont-extend-incomplete-tiles`)
15
+
16
+ v0.1.2
17
+ ------
18
+
19
+ - Lost to history
20
+
21
+ v0.1.1
22
+ ------
23
+
24
+ - Lost to history
25
+
26
+ v0.1.0
27
+ ------
28
+
29
+ - Lost to history
30
+
31
+ v0.0.1
32
+ ------
33
+
34
+ - Lost to history
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Oliver Marriott
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,73 @@
1
+ Tile Up
2
+ =======
3
+
4
+ *Tile Up* is a ruby Ruby gem that splits a large image into a set of tiles to use with javascript mapping libraries such as [Leaflet.js](http://leafletjs.com) or [Modest Maps](http://modestmaps.com/). You can also use *Tile Up* to make tiles for `CATiledLayer` (or anything else really...).
5
+
6
+ Installation
7
+ ------------
8
+
9
+ `gem install tileup`
10
+
11
+ `tileup` requires `rmagick` for image manipulation, which depends on `imagemagick`. `imagemagick` is avaliable through `homebrew`.
12
+
13
+ Usage
14
+ -----
15
+
16
+ ### Basics
17
+
18
+ To generate some tiles from a large image, you'll probably use something like:
19
+
20
+ ```
21
+ tileup --in huge_image.png --output-dir image_tiles \
22
+ --prefix my_tiles --verbose
23
+ ```
24
+
25
+ Which will split `huge_image.png` up into `256x256` (default) sized tiles, and save them into the directory `image_tiles`. The images will be saved as `my_tiles_[COLUMN]_[ROW].png`
26
+
27
+ ```
28
+ image_tiles/my_tiles_0_0.png
29
+ image_tiles/my_tiles_0_1.png
30
+ image_tiles/my_tiles_0_2.png
31
+ ...
32
+ ```
33
+
34
+ ### Auto zooming
35
+
36
+ `tileup` can also scale your image for a number of zoom levels (max 20 levels). This is done by *scaling down* the original image, so make sure its pretty big.
37
+
38
+ *(Auto zooming is an experimental hack, it should work fine for smaller increments, but may be unreliable at higher levels. E.g. `--auto-zoom 4` should work fine, `--auto-zoom 20` might not work so well.)*
39
+
40
+ ```
41
+ tileup --in really_huge_image.png --auto-zoom 4 \
42
+ --output-dir map_tiles
43
+ ```
44
+
45
+ `--auto-zoom 4` means, make 4 levesl of zoom, starting from `really_huge_image.png` at zoom level 20, then scale that down for 19, etc.
46
+
47
+ You should see something like:
48
+
49
+ ```
50
+ map_tiles/20/map_tile_0_0.png
51
+ map_tiles/20/map_tile_0_1.png
52
+ map_tiles/20/map_tile_0_2.png
53
+ ...
54
+ map_tiles/19/map_tile_0_0.png
55
+ map_tiles/19/map_tile_0_1.png
56
+ map_tiles/19/map_tile_0_2.png
57
+ ...
58
+ ```
59
+ *(where `20` is zoom level 20, the largest zoom, `19` is half the size of `20`, `18` is half the size of `19`, …)*
60
+
61
+
62
+ ### Getting help
63
+
64
+ You can get help by running `tileup -h`.
65
+
66
+ Contributing
67
+ ------------
68
+
69
+ Fixes and patches welcome, to contribute:
70
+
71
+ 1. Fork this project
72
+ 1. Create a feature or fix branch *off the develop branch*
73
+ 1. Submit a pull request on that branch
data/bin/tileup CHANGED
@@ -3,12 +3,6 @@
3
3
  require 'tileup'
4
4
  require 'optparse'
5
5
 
6
- # auto zoom bigmap.png down 4 times, output to map-tiles dir with map-tile-X-Y.png filename
7
- # maw --in "bigmap.png" --auto-zoom --auto-zoom-levels 4 --output-dir "map-tiles" --filename-prefx="map-tile"
8
-
9
- # maw --in "bigmap.png" --output-dir "map-tiles/20/" --filename-prefix="map-tile" --tile-width 256 --tile-height 256
10
-
11
-
12
6
  options = {
13
7
  tile_width: 256,
14
8
  tile_height: 256,
@@ -20,19 +14,24 @@ options = {
20
14
  }
21
15
 
22
16
  OptionParser.new do |o|
23
- o.on('--in=input_file', " Required input file, your large image to tile up.") { |input_filename| options[:input_filename] = input_filename }
17
+ o.on('--in=input_file', "Required input file, your large image to tile up.") { |input_filename| options[:input_filename] = input_filename }
24
18
  o.on('--prefix=map_tile', "Prefix to append to tile files, e.g. --prefix=my_tile => my_tile_[XN]_[YN].png.") { |prefix| options[:filename_prefix] = prefix }
25
19
  o.on('--tile-width=256', "Tile width, should normally equal tile height.") { |width| options[:tile_width] = width }
26
20
  o.on('--tile-height=256', "Tile height, should normally equal tile width.") { |height| options[:tile_height] = height }
27
21
  o.on('--auto-zoom=', Integer, "Automatically scale input image N times, must be a number."){ |zooms| options[:auto_zoom_levels] = zooms }
28
22
  o.on('--output-dir=', "Output directory (will be created if it doesn't exist).") { |output_dir| options[:output_dir] = output_dir }
29
23
  o.on('--dont-extend-incomplete-tiles',
30
- "Do not extend edge tiles if they do not fill an entire tile_width x tile_height. By default tileup will extend tiles to tile_width x tile_height if required.") {|e|options[:extend_incomplete_tiles] = false}
24
+ "Do not extend edge tiles if they do not fill an entire tile_width x tile_height. " +
25
+ "By default tileup will extend tiles to tile_width x tile_height if required.") {|e|options[:extend_incomplete_tiles] = false}
31
26
  o.on('-v', '--verbose', "Enable verbose logging.") { |verbose| options[:verbose] = true }
32
27
  o.on('-h', '--help', "You're looking at it.") { puts o; exit }
28
+ o.on('--version', "Version information (v#{TileUp::VERSION})") { puts TileUp::VERSION; exit }
33
29
  begin
34
30
  o.parse!
31
+ rescue SystemExit => e
32
+ exit
35
33
  rescue Exception => e
34
+ puts e.class
36
35
  puts "Argument error, #{e.message}. Try running '#{File.basename($PROGRAM_NAME)} -h'"
37
36
  exit
38
37
  end
@@ -43,4 +42,9 @@ if options[:input_filename].nil?
43
42
  exit 1
44
43
  end
45
44
 
46
- TileUp::Tiler.new(options[:input_filename], options)
45
+ begin
46
+ TileUp::Tiler.new(options[:input_filename], options)
47
+ rescue Interrupt
48
+ puts "\n\nInterrupt received, exiting.\n"
49
+ exit
50
+ end
@@ -1,151 +1,2 @@
1
- require 'ostruct'
2
- require 'RMagick'
3
- require 'fileutils'
4
-
5
- module TileUp
6
-
7
- class Tiler
8
-
9
- def initialize(image_filename, options)
10
- default_options = {
11
- auto_zoom_levels: nil,
12
- tile_width: 256,
13
- tile_height: 256,
14
- filename_prefix: "map_tile",
15
- output_dir: ".",
16
- extend_incomplete_tiles: true,
17
- verbose: false
18
- }
19
- @options = OpenStruct.new(default_options.merge(options))
20
- @options.tile_width = @options.tile_width.to_i unless !@options.tile_width.respond_to? :to_i
21
- @options.tile_height = @options.tile_height.to_i unless !@options.tile_height.respond_to? :to_i
22
- @extension = image_filename.split(".").last
23
- @filename_prefix = @options.filename_prefix
24
-
25
- begin
26
- @image = Magick::Image::read(image_filename).first
27
- rescue Magick::ImageMagickError => e
28
- puts "Could not open image #{image_filename}."
29
- exit
30
- end
31
-
32
- if @options.auto_zoom_levels && @options.auto_zoom_levels > 20
33
- puts "Warning: auto zoom levels hard limited to 20."
34
- @options.auto_zoom_levels = 20
35
- end
36
- if @options.auto_zoom_levels && @options.auto_zoom_levels <= 0
37
- @options.auto_zoom_levels = nil
38
- end
39
-
40
- puts "Opened #{image_filename}, #{@image.columns} x #{@image.rows}"
41
-
42
- # pre-process our inputs to work out what we're supposed to do
43
- tasks = []
44
-
45
- if @options.auto_zoom_levels.nil?
46
- # if we have no auto zoom request, then
47
- # we dont shrink or scale, and save directly to the output
48
- # dir.
49
- tasks << {
50
- output_dir: @options.output_dir, # normal output dir
51
- scale: 1.0 # dont scale
52
- }
53
- else
54
- # do have zoom levels, so construct those tasks
55
- zoom_name = 20
56
- scale = 1.0
57
- tasks << {
58
- output_dir: File.join(@options.output_dir, zoom_name.to_s),
59
- scale: scale
60
- }
61
- (@options.auto_zoom_levels-1).times do |level|
62
- scale = scale / 2.0
63
- zoom_name = zoom_name - 1
64
- tasks << {
65
- output_dir: File.join(@options.output_dir, zoom_name.to_s),
66
- scale: scale
67
- }
68
- end
69
- end
70
-
71
- # run through tasks list
72
- tasks.each do |task|
73
- image = @image
74
- image_path = File.join(task[:output_dir], @filename_prefix)
75
- if task[:scale] != 1.0
76
- # if scale required, scale image
77
- begin
78
- image = @image.scale(task[:scale])
79
- rescue RuntimeError => e
80
- message = "Failed to scale image, are you sure the original image "\
81
- "is large enough to scale down this far (#{scale}) with this "\
82
- "tilesize (#{@options.tile_width}x#{@options.tile_height})?"
83
- puts message
84
- exit
85
- end
86
- end
87
- # make output dir
88
- make_path(task[:output_dir])
89
- self.make_tiles(image, image_path, @options.tile_width, @options.tile_height)
90
- image = nil
91
- end
92
-
93
- puts "Finished."
94
-
95
- end
96
-
97
- def make_path(directory_path)
98
- FileUtils.mkdir_p directory_path
99
- end
100
-
101
- def make_tiles(image, filename_prefix, tile_width, tile_height)
102
- # find image width and height
103
- # then find out how many tiles we'll get out of
104
- # the image, then use that for the xy offset in crop.
105
- num_columns = (image.columns/tile_width.to_f).ceil
106
- num_rows = (image.rows/tile_height.to_f).ceil
107
- x,y,column,row = 0,0,0,0
108
- crops = []
109
-
110
- puts "Tiling image into columns: #{num_columns}, rows: #{num_rows}"
111
-
112
- while true
113
- x = column * tile_width
114
- y = row * tile_height
115
- crops << {
116
- x: x,
117
- y: y,
118
- row: row,
119
- column: column
120
- }
121
- column = column + 1
122
- if column >= num_columns
123
- column = 0
124
- row = row + 1
125
- end
126
- if row >= num_rows
127
- break
128
- end
129
- end
130
-
131
- crops.each do |c|
132
- ci = image.crop(c[:x], c[:y], tile_width, tile_height, true);
133
-
134
- # unless told to do otherwise, extend tiles in the last row and column
135
- # if they do not fill an entire tile width and height.
136
- if @options.extend_incomplete_tiles && (c[:row] == num_rows - 1 || c[:column] == num_columns - 1)
137
- # fill to width height, start from top left corner.
138
- ci = ci.extent(tile_width, tile_height, 0, 0)
139
- end
140
-
141
- print "Saving tile: #{c[:row]}, #{c[:column]}..." if @options.verbose
142
- ci.write("#{filename_prefix}_#{c[:column]}_#{c[:row]}.#{@extension}")
143
- print "\rSaving tile: #{c[:row]}, #{c[:column]}... saved\n" if @options.verbose
144
-
145
- ci = nil
146
- end
147
- end
148
-
149
- end
150
-
151
- end
1
+ require 'tileup/tiler'
2
+ require 'tileup/version'
@@ -0,0 +1,96 @@
1
+ require 'logger'
2
+ require 'ostruct'
3
+
4
+ module TileUp
5
+
6
+ # Base logger class, subclass this, do not use directly.
7
+ class TileUpLogger
8
+
9
+ def self.sym_to_severity(sym)
10
+ severities = {
11
+ :debug => Logger::DEBUG,
12
+ :info => Logger::INFO,
13
+ :warn => Logger::WARN,
14
+ :error => Logger::ERROR,
15
+ :fatal => Logger::FATAL
16
+ }
17
+ severity = severities[sym] || Logger::UNKNOWN
18
+ end
19
+
20
+ # create logger set to given level
21
+ # where level is a symbol (:debug, :info, :warn, :error, :fatal)
22
+ # options may specifiy verbose, which will log more info messages
23
+ def initialize(level, options)
24
+ @severity = level
25
+ default_options = {
26
+ verbose: false
27
+ }
28
+ @options = OpenStruct.new(default_options.merge(options))
29
+ end
30
+
31
+ def level
32
+ @level
33
+ end
34
+
35
+ def level=(severity)
36
+ logger.level = TileUpLogger.sym_to_severity(severity)
37
+ end
38
+
39
+ # log an error message
40
+ def error(message)
41
+ # note, we always log error messages
42
+ add(:error, message)
43
+ end
44
+
45
+ # log a regular message
46
+ def info(message)
47
+ add(:info, message)
48
+ end
49
+
50
+ def warn(message)
51
+ add(:warn, message)
52
+ end
53
+
54
+ # log a verbose message
55
+ def verbose(message)
56
+ add(:info, message) if verbose?
57
+ end
58
+
59
+ private
60
+
61
+ # add message to log
62
+ def add(severity, message)
63
+ severity = TileUpLogger.sym_to_severity(severity)
64
+ logger.add(severity, message)
65
+ end
66
+
67
+ # is logger in verbose mode?
68
+ def verbose?
69
+ @options.verbose
70
+ end
71
+
72
+ # create or return a logger
73
+ def logger
74
+ @logger ||= create_logger
75
+ end
76
+
77
+ # subclasses should overwrite this method, creating what ever
78
+ # logger they want to
79
+ def create_logger
80
+ raise "You should create your own `create_logger` method"
81
+ end
82
+
83
+ end
84
+
85
+ # Log to console logger
86
+ class ConsoleLogger < TileUpLogger
87
+ private
88
+ def create_logger
89
+ @logger = Logger.new(STDOUT)
90
+ @logger.formatter = Proc.new do |sev, time, prg, msg|
91
+ "#{time.strftime('%H:%M:%S').to_s} => #{msg}\n"
92
+ end
93
+ @logger
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,160 @@
1
+ require 'ostruct'
2
+ require 'RMagick'
3
+ require 'fileutils'
4
+ require 'tileup/logger'
5
+
6
+ module TileUp
7
+
8
+ class Tiler
9
+
10
+ def initialize(image_filename, options)
11
+ default_options = {
12
+ auto_zoom_levels: nil,
13
+ tile_width: 256,
14
+ tile_height: 256,
15
+ filename_prefix: "map_tile",
16
+ output_dir: ".",
17
+ extend_incomplete_tiles: true,
18
+ verbose: false
19
+ }
20
+ @options = OpenStruct.new(default_options.merge(options))
21
+ @options.tile_width = @options.tile_width.to_i unless !@options.tile_width.respond_to? :to_i
22
+ @options.tile_height = @options.tile_height.to_i unless !@options.tile_height.respond_to? :to_i
23
+ @extension = image_filename.split(".").last
24
+ @filename_prefix = @options.filename_prefix
25
+ @logger = ConsoleLogger.new(:info, {verbose: @options.verbose})
26
+
27
+ begin
28
+ @image = Magick::Image::read(image_filename).first
29
+ rescue Magick::ImageMagickError => e
30
+ @logger.error "Could not open image #{image_filename}."
31
+ exit
32
+ end
33
+
34
+ if @options.auto_zoom_levels && @options.auto_zoom_levels > 20
35
+ @logger.warn "Warning: auto zoom levels hard limited to 20."
36
+ @options.auto_zoom_levels = 20
37
+ end
38
+ if @options.auto_zoom_levels && @options.auto_zoom_levels <= 0
39
+ @options.auto_zoom_levels = nil
40
+ end
41
+
42
+ @logger.info "Opened #{image_filename}, #{@image.columns} x #{@image.rows}"
43
+
44
+ # pre-process our inputs to work out what we're supposed to do
45
+ tasks = []
46
+
47
+ if @options.auto_zoom_levels.nil?
48
+ # if we have no auto zoom request, then
49
+ # we dont shrink or scale, and save directly to the output
50
+ # dir.
51
+ tasks << {
52
+ output_dir: @options.output_dir, # normal output dir
53
+ scale: 1.0 # dont scale
54
+ }
55
+ else
56
+ # do have zoom levels, so construct those tasks
57
+ zoom_name = 20
58
+ scale = 1.0
59
+ tasks << {
60
+ output_dir: File.join(@options.output_dir, zoom_name.to_s),
61
+ scale: scale
62
+ }
63
+ (@options.auto_zoom_levels-1).times do |level|
64
+ scale = scale / 2.0
65
+ zoom_name = zoom_name - 1
66
+ tasks << {
67
+ output_dir: File.join(@options.output_dir, zoom_name.to_s),
68
+ scale: scale
69
+ }
70
+ end
71
+ end
72
+
73
+ # run through tasks list
74
+ tasks.each do |task|
75
+ image = @image
76
+ image_path = File.join(task[:output_dir], @filename_prefix)
77
+ if task[:scale] != 1.0
78
+ # if scale required, scale image
79
+ begin
80
+ image = @image.scale(task[:scale])
81
+ rescue RuntimeError => e
82
+ message = "Failed to scale image, are you sure the original image "\
83
+ "is large enough to scale down this far (#{scale}) with this "\
84
+ "tilesize (#{@options.tile_width}x#{@options.tile_height})?"
85
+ @logger.error message
86
+ exit
87
+ end
88
+ end
89
+ # make output dir
90
+ make_path(task[:output_dir])
91
+ self.make_tiles(image, image_path, @options.tile_width, @options.tile_height)
92
+ image = nil
93
+ end
94
+
95
+ @logger.info "Finished."
96
+
97
+ end
98
+
99
+ def make_path(directory_path)
100
+ FileUtils.mkdir_p directory_path
101
+ end
102
+
103
+ def make_tiles(image, filename_prefix, tile_width, tile_height)
104
+ # find image width and height
105
+ # then find out how many tiles we'll get out of
106
+ # the image, then use that for the xy offset in crop.
107
+ num_columns = (image.columns/tile_width.to_f).ceil
108
+ num_rows = (image.rows/tile_height.to_f).ceil
109
+ x,y,column,row = 0,0,0,0
110
+ crops = []
111
+
112
+ @logger.info "Tiling image into columns: #{num_columns}, rows: #{num_rows}"
113
+
114
+ while true
115
+ x = column * tile_width
116
+ y = row * tile_height
117
+ crops << {
118
+ x: x,
119
+ y: y,
120
+ row: row,
121
+ column: column
122
+ }
123
+ column = column + 1
124
+ if column >= num_columns
125
+ column = 0
126
+ row = row + 1
127
+ end
128
+ if row >= num_rows
129
+ break
130
+ end
131
+ end
132
+
133
+ crops.each do |c|
134
+ @logger.verbose "Crop: x: #{c[:x]}, y: #{c[:y]}, w: #{tile_width}, h: #{tile_height}"
135
+ ci = image.crop(c[:x], c[:y], tile_width, tile_height, true);
136
+
137
+ # unless told to do otherwise, extend tiles in the last row and column
138
+ # if they do not fill an entire tile width and height.
139
+
140
+ is_edge = (c[:row] == num_rows - 1 || c[:column] == num_columns - 1)
141
+ needs_extension = ci.rows != tile_height || ci.columns != tile_width
142
+ if @options.extend_incomplete_tiles && is_edge && needs_extension
143
+ # defaults to white background color, but transparent is probably
144
+ # a better default for our purposes.
145
+ ci.background_color = "none"
146
+ # fill to width height, start from top left corner.
147
+ ci = ci.extent(tile_width, tile_height, 0, 0)
148
+ end
149
+
150
+ @logger.verbose "Saving tile: #{c[:row]}, #{c[:column]}..."
151
+ ci.write("#{filename_prefix}_#{c[:column]}_#{c[:row]}.#{@extension}")
152
+ @logger.verbose "Saving tile: #{c[:row]}, #{c[:column]}... saved"
153
+
154
+ ci = nil
155
+ end
156
+ end
157
+
158
+ end
159
+
160
+ end
@@ -0,0 +1,3 @@
1
+ module TileUp
2
+ VERSION = '0.1.4'
3
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tileup/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'tileup'
8
+ spec.version = TileUp::VERSION
9
+ spec.date = Date.today.to_s
10
+ spec.summary = "Turn an image into an X,Y tile set for use with JS mapping libraries"
11
+ spec.description = spec.summary
12
+ spec.authors = ["Oliver Marriott"]
13
+ spec.email = 'hello@omarriott.com'
14
+ spec.homepage = 'http://github.com/rktjmp/tileup'
15
+ spec.license = "MIT"
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+ spec.add_runtime_dependency "rmagick", ["~> 2.13.2"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake"
24
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tileup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-16 00:00:00.000000000 Z
12
+ date: 2013-08-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rmagick
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 2.13.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.3'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
30
62
  description: Turn an image into an X,Y tile set for use with JS mapping libraries
31
63
  email: hello@omarriott.com
32
64
  executables:
@@ -34,10 +66,18 @@ executables:
34
66
  extensions: []
35
67
  extra_rdoc_files: []
36
68
  files:
37
- - lib/tileup.rb
69
+ - CHANGES.md
70
+ - LICENCE.txt
71
+ - README.md
38
72
  - bin/tileup
73
+ - lib/tileup.rb
74
+ - lib/tileup/logger.rb
75
+ - lib/tileup/tiler.rb
76
+ - lib/tileup/version.rb
77
+ - tileup.gemspec
39
78
  homepage: http://github.com/rktjmp/tileup
40
- licenses: []
79
+ licenses:
80
+ - MIT
41
81
  post_install_message:
42
82
  rdoc_options: []
43
83
  require_paths:
@@ -61,3 +101,4 @@ signing_key:
61
101
  specification_version: 3
62
102
  summary: Turn an image into an X,Y tile set for use with JS mapping libraries
63
103
  test_files: []
104
+ has_rdoc: