Python小图合并成大图 Unity解析复古资源

复古资源地图大多大于16384*16384(unity创建的最大贴图) 所以将地图切割成小图保存到本地 交给python处理
在这里插入图片描述

# 小图拼接成大图
# 由于Unity不能创建超过16384的Texture, 所以用Python解决
import PIL.Image as Image
import os
import json
import time
import sys

Image.LOAD_TRUNCATED_IMAGES = True

# 图片大小上线
Image.MAX_IMAGE_PIXELS = None
debug = sys.gettrace()

if debug :
    print("Debug模式\n")
    savePath = 'E:\\RXCQ\\map\\bigImage\\'
    pathRoot = 'E:\\RXCQ\\map\\tiles'
    thumbnailRoot = 'E:\\RXCQ\map\\thumbnails\\'
else:
    print("Release模式\n")
    savePath = sys.argv[2]
    pathRoot = sys.argv[1]

filePaths = os.listdir(pathRoot)
global fileIndex
fileIndex = 0

if not os.path.exists(savePath):
    os.makedirs(savePath)

def merge(path):
    global fileIndex
    fileIndex += 1

    paths = os.listdir(path)
    base_name = os.path.basename(path)
    jsonPath = path + "\\..\\..\\Json\\" + base_name + ".json"
    with open(jsonPath, 'r', encoding = 'UTF-8') as f:
        load_dict = json.load(f)

    textureWidth = load_dict['width']
    textureHeight = load_dict['height']

    to_image = Image.new('RGB', (textureWidth, textureHeight))
    imageSavePath = savePath + base_name + '.jpg'

    if os.path.exists(imageSavePath):
        return

    length = len(paths)
    name = paths[length - 1].split('.')[0]
    x = int(name.split('_')[0]) + 1
    y = int(name.split('_')[1]) + 1

    index = 0
    count = x * y
    for i in range(0, x):
        for j in range(0, y):
            index += 1
            imageFileName = str(i) + "_" + str(j)
            imagePath = path + "\\" + imageFileName + ".jpg"
            from_image = Image.open(imagePath)
            to_image.paste(from_image, (j * from_image.width, i * from_image.height))
            progress = int(index / count * 100)
            print("\r", end="")
            print("小图拼接到大图: {}%, {}, 当前地图名字: {} ".format(progress, "{}/{}".format(fileIndex, len(filePaths)), base_name), end="")

            sys.stdout.flush()
            time.sleep(0.01)

    to_image.save(imageSavePath)

    # 生成缩略图
    Thumbnail(to_image, base_name, 600, 400)

def mergeImages():
    for i in range(0, len(filePaths)):
        filePath = pathRoot + "\\" + filePaths[i]
        merge(filePath)

def Rename():
     for i in range(0, len(filePaths)):
        filePath = pathRoot + "\\" + filePaths[i]
        paths = os.listdir(filePath)
        base_name = os.path.basename(filePath)

        if len(paths) == 1 :
            suffix = paths[0].split('.')[1]
            newName = '0_0.' + suffix
            os.rename(filePath + '\\' + paths[0], filePath + '\\' + newName)
            print("重命名 {} To {}".format(paths[0], newName))

def Thumbnail(toImage, Name, Width, Height):
    # 生成缩略图
    size = Width, Height
    toImage.thumbnail(size)
    toImage.save(thumbnailRoot + Name + '.jpg')
    

Rename()
mergeImages()
print("\n全部拼接完成, {}/{}".format(fileIndex, len(filePaths)))

合并后的
在这里插入图片描述
Unity解析怀旧资源

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值