You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.2 KiB
						
					
					
				# byte is assumed to be octet
 | 
						|
# char is assumed to be 1 byte
 | 
						|
#
 | 
						|
# struct rawimg {
 | 
						|
#   char[8]   magic_num = "rifV0001" // Big Endian. UTF-8 Encoded. 72 69 66 56 30 30 30 31
 | 
						|
#   uint64_t  width;                 // Big Endian
 | 
						|
#   uint8_t   format;
 | 
						|
#   uint8_t[] data;
 | 
						|
# }
 | 
						|
#
 | 
						|
# struct rawimg_little {
 | 
						|
#   char[8]   magic_num = "lifV0001" // Big Endian. UTF-8 Encoded. 6C 69 66 56 30 30 30 31
 | 
						|
#   uint64_t  width;                 // Little Endian
 | 
						|
#   uint8_t   format;
 | 
						|
#   uint8_t[] data;
 | 
						|
# }
 | 
						|
#
 | 
						|
# formats:
 | 
						|
#   0x00 = (24 bits / 3 bytes) R8 B8 G8
 | 
						|
#   0x01 = (32 bits / 4 bytes) R8 B8 G8 A8
 | 
						|
#   ... undefined in V0001
 | 
						|
#
 | 
						|
# data is a flat array, starting at top left, going right then bottom.
 | 
						|
 | 
						|
from PIL import Image
 | 
						|
 | 
						|
import sys
 | 
						|
 | 
						|
# RGB, RGBA
 | 
						|
frm_sizes = [3, 4]
 | 
						|
frm_names = ["RGB", "RGBA"]
 | 
						|
 | 
						|
f_in = open(sys.argv[1], "rb")
 | 
						|
order = f_in.read(1)
 | 
						|
magic = order+f_in.read(7)
 | 
						|
width = int.from_bytes(f_in.read(8), byteorder=("big" if order == b'r' else "little"))
 | 
						|
formt = int.from_bytes(f_in.read(1))
 | 
						|
data = f_in.read()
 | 
						|
frm_size = frm_sizes[formt]
 | 
						|
height = (len(data)//frm_size)//width
 | 
						|
 | 
						|
print(width, height)
 | 
						|
img = Image.frombuffer(frm_names[formt], (width, height), data, "raw", frm_names[formt], 0, 1)
 | 
						|
img.save('.'.join(sys.argv[1].split(".")[:1])+".png")
 |