mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-24 11:16:11 +00:00
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
|
from PIL import Image
|
||
|
import sys, os
|
||
|
from struct import pack as pk
|
||
|
|
||
|
SPLASH_SCREEN_WIDTH = 1280
|
||
|
SPLASH_SCREEN_HEIGHT = 720
|
||
|
|
||
|
SPLASH_SCREEN_STRIDE = 768
|
||
|
|
||
|
def convert_image(image_fn):
|
||
|
splash = Image.open(image_fn, 'r')
|
||
|
w, h = splash.size
|
||
|
if w == 1280 and h == 720:
|
||
|
splash = splash.transpose(Image.ROTATE_90)
|
||
|
w, h = splash.size
|
||
|
assert w == 720
|
||
|
assert h == 1280
|
||
|
splash = splash.convert('RGBA')
|
||
|
splash_bin = b''
|
||
|
for row in range(SPLASH_SCREEN_WIDTH):
|
||
|
for col in range(SPLASH_SCREEN_HEIGHT):
|
||
|
r, g, b, a = splash.getpixel((col, row))
|
||
|
splash_bin += pk('<BBBB', b, g, r, a)
|
||
|
splash_bin += b'\x00' * ((SPLASH_SCREEN_STRIDE - SPLASH_SCREEN_HEIGHT) * 4)
|
||
|
return splash_bin
|
||
|
|
||
|
def main(argc, argv):
|
||
|
if argc != 3:
|
||
|
print('Usage: %s image package3' % argv[0])
|
||
|
return 1
|
||
|
with open(argv[2], 'rb') as f:
|
||
|
package3 = f.read()
|
||
|
assert package3[:4] == b'PK31'
|
||
|
assert len(package3) == 0x800000
|
||
|
splash_bin = convert_image(argv[1])
|
||
|
assert len(splash_bin) == 0x3C0000
|
||
|
with open(argv[2], 'wb') as f:
|
||
|
f.write(package3[:0x400000])
|
||
|
f.write(splash_bin)
|
||
|
f.write(package3[0x7C0000:])
|
||
|
return 0
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sys.exit(main(len(sys.argv), sys.argv))
|