Skip to content

Creating Tiles

moagrius edited this page Sep 8, 2013 · 1 revision

There are a number of ways to create tiles from large images - some online services exist, but tend to be limited in file size and not as flexible as desktop applications.

While it's possible to do in PhotoShop, using the slice tool, you're limited to a total number of tiles (I forget the limit, but I do remember it usually wasn't enough). You could use multiple slice operations, but IMO the free utility ImageMagick is the best bet. Just download the binary somewhere and use the command line (windows, mac, or nix) to run it.

The main command you'll want to run is something like this:

c:\path\to\imagemagick\convert c:\path\to\big\image.png -crop 256x256 -set filename:tile "%%[fx:page.x/256]_%%[fx:page.y/256]" +repage +adjoin c:\path\to\tile\folder\tile-%%[filename:tile].png"

The above will split image.png into 256x256 tiles, and name them "tile-i-j.png", where "i" is the column index and "j" is the row index.

If you have a really large image, you may run out of memory - if that's the case, then you'll need to cache the image during the process, by adding these switches:

-limit map 0 -limit memory 0

e.g.,

c:\path\to\imagemagick\convert -limit map 0 -limit memory 0 c:\path\to\big\image.png -crop 256x256 -set filename:tile "%%[fx:page.x/256]_%%[fx:page.y/256]" +repage +adjoin c:\path\to\tile\folder\tile-%%[filename:tile].png"

Based on work by Tristus1er, here's a batch script that'll create 4 tile sets and samples from a single image (note that this might not be appropriate for all apps - most of the apps I've done have used different images for some of the different tile sets). You'll need to set the first 8 variables to the appropriate values.

@echo off

echo should already have original image in folder, as well as folders named tiles and samples

set basename=my_image_base_name
set filename=my-image.jpg
set extension=jpg

set imagemagick=C:\path\to\ImageMagick\convert
set /a tilesize=256
set /a samplesize=500

set tilesfolder=tiles
set samplesfolder=samples

echo create tile folders
mkdir %tilesfolder%\%basename%
mkdir %tilesfolder%\%basename%\1000
mkdir %tilesfolder%\%basename%\500
mkdir %tilesfolder%\%basename%\250
mkdir %tilesfolder%\%basename%\125

echo create half-sized versions for tiling (will be discarded later)
%imagemagick% %filename% -resize 50%%  %basename%-500.%extension%
%imagemagick% %filename% -resize 25%%  %basename%-250.%extension%
%imagemagick% %filename% -resize 12.5%%  %basename%-125.%extension%

echo create sample
%imagemagick% %filename% -thumbnail %samplesize%x%samplesize%  ./%samplesfolder%/%filename%

echo create tiles
%imagemagick% %filename% -crop %tilesize%x%tilesize% -set filename:tile "%%[fx:page.x/%tilesize%]_%%[fx:page.y/%tilesize%]" +repage +adjoin "./%tilesfolder%/%basename%/1000/%%[filename:tile].%extension%"
%imagemagick% %basename%-500.%extension% -crop %tilesize%x%tilesize% -set filename:tile "%%[fx:page.x/%tilesize%]_%%[fx:page.y/%tilesize%]" +repage +adjoin "./%tilesfolder%/%basename%/500/%%[filename:tile].%extension%"
%imagemagick% %basename%-250.%extension% -crop %tilesize%x%tilesize% -set filename:tile "%%[fx:page.x/%tilesize%]_%%[fx:page.y/%tilesize%]" +repage +adjoin "./%tilesfolder%/%basename%/250/%%[filename:tile].%extension%"
%imagemagick% %basename%-125.%extension% -crop %tilesize%x%tilesize% -set filename:tile "%%[fx:page.x/%tilesize%]_%%[fx:page.y/%tilesize%]" +repage +adjoin "./%tilesfolder%/%basename%/125/%%[filename:tile].%extension%"

echo cleanup
del %basename%-500.%extension%
del %basename%-250.%extension%
del %basename%-125.%extension%

echo DONE
pause
Clone this wiki locally