/
exr_handler.py
51 lines (43 loc) · 1.41 KB
/
exr_handler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import OpenEXR
import Imath
import sys, array
def Put_Exr_Data (_ExrFile,channels_name):
file = OpenEXR.InputFile(_ExrFile)
pt = Imath.PixelType(Imath.PixelType.FLOAT)
dw = file.header()['dataWindow']
size = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
if channels_name=='RGB':
RedStr = file.channel('R', pt)
GreenStr = file.channel('G', pt)
BlueStr = file.channel('B', pt)
else:
RedStr = file.channel(channels_name, pt)
GreenStr = file.channel(channels_name, pt)
BlueStr = file.channel(channels_name, pt)
Red = array.array('f', RedStr)
Green = array.array('f', GreenStr)
Blue = array.array('f', BlueStr)
HR_exr=OpenEXR.InputFile(_ExrFile).header()
return (Red,Green,Blue,size,HR_exr)
def EncodeToSRGB(v):
if (v <= 0.0031308):
return (v * 12.92) * 255.0
else:
return (1.055*(v**(1.0/2.2))-0.055) * 255.0
def ConvertSRGB(Red,Green,Blue):
rgb_size=range(len(Red))
for I in rgb_size:
Red[I] = EncodeToSRGB(Red[I])
Green[I] = EncodeToSRGB(Green[I])
Blue[I] = EncodeToSRGB(Blue[I])
return Red,Green,Blue
def format(d, tab=0):
s = ['{\n']
for k,v in d.items():
if isinstance(v, dict):
v = format(v, tab+1)
else:
v = repr(v)
s.append('%s%r: %s,\n' % (' '*tab, k, v))
s.append('%s}' % (' '*tab))
return ''.join(s)