PspptReader
Python
This is an example of reading a PS-PPT file and plotting a force image. An easter egg has also been hidden.
main
0 files
PspptReader..py
PspptReader..py
2821 bytes
import pspylib.ppt.tools as Tools
import pspylib.ppt.defines as Defines
from pspylib.ppt.reader import Reader
from pspylib.utils.types import PsDict
class PspptReader:
def __init__(self, file_path):
self.reader = Reader(file_path)
self.start_info, self.param_info, self.rtfd_info, self.rtfd_numbers, self.frame_table = self.get_frame()
def get_frame(self):
frame_table = {}
rtfd_info = {}
rtfd_numbers = {}
for index, entry in enumerate(self.reader.table.entries):
try:
frame = self.reader.read(entry)
if frame.type.id == Defines.FRAME_TYPE_SCAN_START:
start_info = PsDict(frame.contents).to_dict()
elif frame.type.id == Defines.FRAME_TYPE_PPT_PARAM :
param_info = PsDict(frame.contents).to_dict()
elif frame.type.id == Defines.FRAME_TYPE_PPT_FD_CURVE:
rtfd = PsDict(frame.contents).to_dict()
rtfd_info[str(index)] = rtfd['info']
rtfd_numbers[str(index)] = {}
for i, ch in enumerate(rtfd['info']['channels']):
rtfd_numbers[str(index)][ch['id']] = Tools.decode_numbers('f', rtfd['numbers'][i])
else: break
frame_table[str(index)] = frame.type.id
except:
print('ERROR')
return start_info, param_info, rtfd_info, rtfd_numbers, frame_table
if __name__ == "__main__":
import numpy as np
import matplotlib.pyplot as plt
def print_info(ps_ppt_path):
ps_ppt_reader = PspptReader(ps_ppt_path)
print(ps_ppt_reader.start_info)
def get_fd(ps_ppt_path, index=10):
ps_ppt_reader = PspptReader(ps_ppt_path)
rtfd_numbers = ps_ppt_reader.rtfd_numbers
force = rtfd_numbers[str(index)]['Force']
separation = rtfd_numbers[str(index)]['Separation']
return force, separation
def __min_method(data):
return np.min(data)
def get_force_image(ps_ppt_path, method=__min_method):
ps_ppt_reader = PspptReader(ps_ppt_path)
rtfd_numbers = ps_ppt_reader.rtfd_numbers
geometry = ps_ppt_reader.start_info['geometry']
pixel_x = geometry['pixelHeight']
pixel_y = geometry['pixelWidth']
rotation = geometry['rotation']
one_hot = []
for i in range(2,len(rtfd_numbers)+2):
one_hot.append(method(rtfd_numbers[str(i)]['Force']))
image = np.reshape(one_hot, (pixel_x, pixel_y))
return image
ps_ppt_path = 'example.ps-ppt'
img = get_force_image(ps_ppt_path)
plt.imshow(img, cmap='gray')
plt.show()
Comments (0)
No comments yet. Be the first to comment!