前言
最近在做一个mmo的游戏,里面的大地图是一张非常巨大的图片,我们要根据玩家所在的位置,动态加载地块,这就需要我们把这张大图拆分成n行m列,本来想着美术就可以拆了,但是因为图片太多,给美术也增加了不少工作量,于是,我就想到了强大的PIL,果断花费30分钟,给美术写了一个快速批量拆分图片的工具。
废话不多说,代码逻辑也不复杂,直接上代码吧
from PIL import Image
import os
# 图片文件夹路径
root_path = "C:/Users/jzq/Desktop/Test/"
out_path = "C:/Users/jzq/Desktop/Test/"
# 后缀
ext_name = '.png'
# 图片名集合
forders = [
# 图片名 切割行数 切割列数
{
"name": "11002", "row": 12, "column": 16},
]
def image_split(file):
img_name = file["name"]
split_row = file["row"]
split_col = file["column"]
image_size = 256
# 拼接图片路径
img_src = root_path + img_name + ext_name
# 拼接图片保存路径
save_root = out_path + img_name + "/"
if not os.path.exists(save_root):
os.makedirs(save_root)
print("split image:"+img_name)
# 开始分割图片
img_now = Image.open(img_src)
index = 0
for r in range(split_row):
for c in range(split_col):
row = split_row - r - 1
col = c
split_area = (image_size * col, row * image_size, image_size * col + image_size, row * image_size + image_size)
save_path = save_root + img_name + "_" + str(index) + ext_name;
index = index + 1
# print(row, col, save_path)
img_now.crop(split_area).save(save_path)
if __name__ == '__main__':
for i in range(0, len(forders)):
image_split(forders[i])