Python
- # importing functions
- import sys
- import os
- import math
- from PIL import Image
- from tqdm import tqdm
- # source path
- img_path = r"C:\Users\Shen\PycharmProjects\pythonProject\0-TileGroup抓图法\魁星图.jpg"
- # output tile directory
- tile_path = 'tiles'
- # tile size
- tile_size = 256
- Image.MAX_IMAGE_PIXELS = None # 禁用解压缩炸弹限制
- def adjustImage(src_img): # ajust image size to tile size
- # get image size
- img_w, img_h = src_img.size
- # calculate tilable img size
- out_w = img_w + (tile_size - img_w % tile_size)
- out_h = img_h + (tile_size - img_h % tile_size)
- # create transparent extra background
- out_img = Image.new('RGBA', (out_w, out_h))
- # combine src image and background
- out_img.paste(src_img, (0,0))
- return out_img
- img = Image.open(img_path)
- w, h = img.size[0], img.size[1]
- # calculate max zoom level
- max_zoom = int(math.ceil(math.log((max(w, h) / tile_size), 2)))
- # main loop for all zoom levels
- for z in tqdm(range(max_zoom, -1, -1)):
- # adjusting image
- adj_img = adjustImage(img)
- # calculating number of rows and columns of tiles
- n_cols = int(adj_img.size[0] / tile_size)
- n_rows = int(adj_img.size[1] / tile_size)
- # print(n_cols,n_rows)
- # loop for creating directories and tiles
- for x in range(n_cols):
- # create z/x directory
- path = os.path.join(tile_path, str(z), str(x))
- if not os.path.isdir(path):
- os.makedirs(path)
- # cut tiles
- for y in range(n_rows):
- bounds = (x * tile_size, y * tile_size, (x + 1) * tile_size, (y + 1) * tile_size)
- tile = adj_img.crop(bounds)
- print(x,y,z)
- tile.save('%s/%s.png' % (path, y))
- # resize image - go to next zoom level
- w, h = img.size[0], img.size[1]
- img = img.resize((int(w/2), int(h/2)), Image.ANTIALIAS)
(Visited 90 times, 1 visits today)
本文作者为书途,转载请注明。