Код: Выделить всё
/home/rykov/sandbox/mymapproxy/cache_data/osm_cache_EPSG900913/06/000/000/038/000/000/034.png
Код: Выделить всё
import os
import Image
z_level = 0
x_level = 3
y_level = 6
tile_size = 256
base = "/home/rykov/sandbox/mymapproxy/cache_data/osm_cache_EPSG900913/"
path = "06"
tiles_paths = []
merged_path = os.path.join(base, path, 'merged.png')
if os.path.isfile(merged_path):
os.remove(merged_path)
for root, dirs, files in os.walk(os.path.join(base, path)):
for f in files:
fname = f.split('.')[0]
tiles_paths.append(os.path.join(root, fname).split('/')[-7:])
x_num_tiles = len(os.listdir(os.path.join(base, "/".join(tiles_paths[0][:x_level]))))
y_num_tiles = max([len(os.listdir(os.path.join(base, "/".join(tiles_paths[:y_level])))) for i in range(len(tiles_paths))])
width = tile_size*x_num_tiles
height = tile_size*y_num_tiles
print "Image size: %s x %s" % (str(width), str(height))
max_x_tile = max([int(d) for d in os.listdir(os.path.join(base, "/".join(tiles_paths[0][:x_level])))])
max_y_tile = max([int(tiles_paths[y_level]) for i in range(len(tiles_paths))])
print "Xmax: %s, Ymax: %s" % (str(max_x_tile), str(max_y_tile))
img = Image.new('RGBA', (width, height))
for tile in tiles_paths:
x_tile = int("".join(tile[1:x_level+1]))
y_tile = int("".join(tile[4:y_level+1]))
tile_img = Image.open("%s.%s" % (os.path.join(base, "/".join(tile)), 'png'))
img.paste(tile_img, (width - (max_x_tile-x_tile+1)*tile_size, (max_y_tile-y_tile)*tile_size))
img.save(merged_path)
print "Image saved into: %s" % merged_path