Ostatnio aktywny 1 month ago

LRIT Full Disk Image converter to JPEG

Rewizja 59f23b58d357515ba2d926c0439299b4837e464c

fulldisk2jpg.py Surowy
1#!/usr/bin/env python
2
3'''
4 Needs Pillow, xrit and numpy
5 pip install xrit Pillow
6
7 Numpy is better to be installed using distro packages.
8'''
9
10import os, math
11import numpy as np
12from PIL import Image
13from xrit import packetmanager
14
15
16folder = "."
17
18lritfiles = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f)) and ".lrit" in f]
19
20grouped = {}
21
22def headersFromFile(filename):
23 f = open(filename, "rb")
24 try:
25 k = packetmanager.readHeader(f)
26 type, filetypecode, headerlength, datalength = k
27 except Exception,e:
28 print(" Header 0 is corrupted for file %s" %filename)
29 return None
30 f.seek(0, 0)
31 data = f.read(headerlength)
32 headers = packetmanager.getHeaderData(data)
33 f.close()
34 return headers
35
36
37for i in lritfiles:
38 headers = headersFromFile(i)
39 curLines = 0
40 curColumns = 0
41 curImageId = 0
42 pixelAspect = 1
43 for header in headers:
44 if header["type"] == 1:
45 curLines += header["lines"]
46 curColumns = header["columns"]
47 elif header["type"] == 2:
48 pixelAspect = float(header["cfac"]) / header["lfac"]
49 elif header["type"] == 128: # Segment Identification Header
50 imageId = header["imageid"]
51 segmentId = header["sequence"]
52 curImageId = imageId
53 if not imageId in grouped:
54 grouped[imageId] = { "segments": {}, "lines": 0 }
55
56 grouped[imageId]["segments"][segmentId] = i
57
58 grouped[imageId]["lines"] += curLines
59 grouped[imageId]["columns"] = curColumns
60 grouped[imageId]["pixelAspect"] = pixelAspect
61
62for i in grouped:
63 print "Processing image %s" %i
64 d = grouped[i]
65 img = Image.new("L", (d["columns"], d["lines"]))
66 pixels = np.array([], dtype=np.uint8)
67 for z in d["segments"]:
68 data = packetmanager.loadData(d["segments"][z])
69 data = np.fromstring(data, dtype=np.uint8)
70 pixels = np.concatenate((pixels, data))
71 img.putdata(pixels)
72 newheight = img.size[1] * d["pixelAspect"]
73 newheight = int(math.ceil(newheight))
74
75 img = img.resize((img.size[0], newheight))
76 img.save("%s.jpg" % i, "JPEG")