2023-11-07 00:37:02 +01:00
|
|
|
import sys
|
|
|
|
import os
|
|
|
|
from PIL import Image
|
|
|
|
from PIL.Image import Resampling
|
|
|
|
|
|
|
|
# Script created by Altiami
|
|
|
|
# Modified by Agent X.
|
|
|
|
|
|
|
|
out_dir = "skyboxes"
|
|
|
|
|
|
|
|
in_fn_id = sys.argv[1]
|
|
|
|
tile_count = 64
|
|
|
|
use_alt_tile_ratio = True
|
|
|
|
tile_len_ratio = 1 / 8 * 32 / 31 if use_alt_tile_ratio else 1 / 8
|
|
|
|
|
|
|
|
in_img = Image.open(f"{in_fn_id}")
|
|
|
|
if in_img.width > in_img.height:
|
|
|
|
in_img = in_img.crop((
|
|
|
|
(in_img.width - in_img.height) // 2,
|
|
|
|
0,
|
|
|
|
in_img.width - (in_img.width - in_img.height) // 2,
|
|
|
|
in_img.height
|
|
|
|
))
|
|
|
|
elif in_img.width < in_img.height:
|
|
|
|
in_img = in_img.crop((
|
|
|
|
0,
|
|
|
|
(in_img.height - in_img.width) // 2,
|
|
|
|
in_img.width,
|
|
|
|
in_img.height - (in_img.height - img_width) // 2
|
|
|
|
))
|
|
|
|
img_width = in_img.width
|
|
|
|
img_height = in_img.height
|
|
|
|
in_img = in_img.crop((0, 0, 2 * img_width, img_height + img_height * tile_len_ratio))
|
|
|
|
in_img.paste(in_img, (img_width, 0))
|
|
|
|
in_img.paste(
|
|
|
|
in_img.crop((0, img_height - 1, in_img.width, img_height))
|
|
|
|
.resize((in_img.width, in_img.height - img_height), Resampling.NEAREST),
|
|
|
|
(0, img_height)
|
|
|
|
)
|
|
|
|
|
|
|
|
if not os.path.exists(out_dir):
|
|
|
|
os.makedirs(out_dir)
|
|
|
|
|
|
|
|
for i in range(tile_count):
|
|
|
|
x_t = i % 8
|
|
|
|
y_t = i // 8
|
2024-07-08 17:53:04 +02:00
|
|
|
separator = "\\" if os.name == "nt" else "/"
|
2023-11-07 00:37:02 +01:00
|
|
|
in_img.crop((
|
|
|
|
img_width * x_t // 8,
|
|
|
|
img_height * y_t // 8,
|
|
|
|
int(img_width * x_t // 8 + img_width * tile_len_ratio),
|
|
|
|
int(img_height * y_t // 8 + img_height * tile_len_ratio)
|
2024-07-08 17:53:04 +02:00
|
|
|
)).save(f"{out_dir}{separator}{os.path.basename(in_fn_id).split('.')[0]}.{f'{i:02}'}.rgba16.png", "PNG", optimize=True)
|