fulldisk2jpg.py
· 2.3 KiB · Python
Исходник
#!/usr/bin/env python
'''
Needs Pillow, xrit and numpy
pip install xrit Pillow
Numpy is better to be installed using distro packages.
'''
import os, math
import numpy as np
from PIL import Image
from xrit import packetmanager
folder = "."
lritfiles = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f)) and ".lrit" in f]
grouped = {}
def headersFromFile(filename):
f = open(filename, "rb")
try:
k = packetmanager.readHeader(f)
type, filetypecode, headerlength, datalength = k
except Exception,e:
print(" Header 0 is corrupted for file %s" %filename)
return None
f.seek(0, 0)
data = f.read(headerlength)
headers = packetmanager.getHeaderData(data)
f.close()
return headers
for i in lritfiles:
headers = headersFromFile(i)
curLines = 0
curColumns = 0
curImageId = 0
pixelAspect = 1
coff = 0
for header in headers:
if header["type"] == 1:
curLines += header["lines"]
curColumns = header["columns"]
elif header["type"] == 2:
pixelAspect = float(header["cfac"]) / header["lfac"]
coff = header["coff"]
elif header["type"] == 128: # Segment Identification Header
imageId = header["imageid"]
segmentId = header["sequence"]
curImageId = imageId
if not imageId in grouped:
grouped[imageId] = { "segments": {}, "lines": 0 }
grouped[imageId]["segments"][segmentId] = i
grouped[imageId]["lines"] += curLines
grouped[imageId]["columns"] = curColumns
grouped[imageId]["pixelAspect"] = pixelAspect
grouped[imageId]["startColumn"] = coff
for i in grouped:
print "Processing image %s" %i
d = grouped[i]
# Crop Left
sc = d["startColumn"]
hw = min(d["columns"] - sc, sc)
cl = d["startColumn"] - hw
# Crop Right
cf = cl + 2 * hw
print " Crop Marks: %s %s" % (cl, cf)
img = Image.new("L", (d["columns"], d["lines"]))
pixels = np.array([], dtype=np.uint8)
for z in d["segments"]:
data = packetmanager.loadData(d["segments"][z])
data = np.fromstring(data, dtype=np.uint8)
pixels = np.concatenate((pixels, data))
img.putdata(pixels)
newheight = img.size[1] * d["pixelAspect"]
newheight = int(math.ceil(newheight))
img = img.crop((cl, 0, cf, img.size[1]))
img = img.resize((img.size[0], newheight))
img.save("%s-crop.jpg" % i, "JPEG")
| 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 | |
| 10 | import os, math |
| 11 | import numpy as np |
| 12 | from PIL import Image |
| 13 | from xrit import packetmanager |
| 14 | |
| 15 | |
| 16 | folder = "." |
| 17 | |
| 18 | lritfiles = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f)) and ".lrit" in f] |
| 19 | |
| 20 | grouped = {} |
| 21 | |
| 22 | def 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 | |
| 37 | for 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 | |
| 65 | for 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") |