Последняя активность 1 month ago

LRIT Full Disk Image converter to JPEG

fulldisk2jpg.py Исходник
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 coff = 0
44 for header in headers:
45 if header["type"] == 1:
46 curLines += header["lines"]
47 curColumns = header["columns"]
48 elif header["type"] == 2:
49 pixelAspect = float(header["cfac"]) / header["lfac"]
50 coff = header["coff"]
51 elif header["type"] == 128: # Segment Identification Header
52 imageId = header["imageid"]
53 segmentId = header["sequence"]
54 curImageId = imageId
55 if not imageId in grouped:
56 grouped[imageId] = { "segments": {}, "lines": 0 }
57
58 grouped[imageId]["segments"][segmentId] = i
59
60 grouped[imageId]["lines"] += curLines
61 grouped[imageId]["columns"] = curColumns
62 grouped[imageId]["pixelAspect"] = pixelAspect
63 grouped[imageId]["startColumn"] = coff
64
65for i in grouped:
66 print "Processing image %s" %i
67 d = grouped[i]
68
69 # Crop Left
70 sc = d["startColumn"]
71 hw = min(d["columns"] - sc, sc)
72 cl = d["startColumn"] - hw
73
74 # Crop Right
75 cf = cl + 2 * hw
76
77 print " Crop Marks: %s %s" % (cl, cf)
78 img = Image.new("L", (d["columns"], d["lines"]))
79 pixels = np.array([], dtype=np.uint8)
80 for z in d["segments"]:
81 data = packetmanager.loadData(d["segments"][z])
82 data = np.fromstring(data, dtype=np.uint8)
83 pixels = np.concatenate((pixels, data))
84 img.putdata(pixels)
85 newheight = img.size[1] * d["pixelAspect"]
86 newheight = int(math.ceil(newheight))
87 img = img.crop((cl, 0, cf, img.size[1]))
88 img = img.resize((img.size[0], newheight))
89 img.save("%s-crop.jpg" % i, "JPEG")