|
import OpenEXR
|
|
import Imath
|
|
import numpy as np
|
|
import simpleimageio as sio
|
|
|
|
width = 420
|
|
height = 32
|
|
border_left = 0
|
|
border_right = 420 - 80
|
|
num_splats = 10000
|
|
|
|
red = np.zeros((height, width), dtype=np.float32)
|
|
green = np.zeros((height, width), dtype=np.float32)
|
|
blue = np.zeros((height, width), dtype=np.float32)
|
|
|
|
# splat random color values
|
|
rng = np.random.default_rng()
|
|
row = rng.integers(low=0, high=height, size=num_splats)
|
|
col = rng.integers(low=border_left, high=border_right, size=num_splats)
|
|
|
|
# if any of the three channels has a fixed value, the problem goes away!
|
|
red[row, col] = rng.random(num_splats)
|
|
green[row, col] = rng.random(num_splats)
|
|
blue[row, col] = rng.random(num_splats)
|
|
|
|
# add a bunch of test pixels
|
|
red[-8, -10] = 1
|
|
green[-8, -10] = 1
|
|
blue[-8, -10] = 1
|
|
|
|
red[-4, -8] = 1
|
|
green[-4, -8] = 1
|
|
blue[-4, -8] = 1
|
|
|
|
red[-4, -2] = 1
|
|
green[-4, -2] = 1
|
|
blue[-4, -2] = 1
|
|
|
|
red[-2, -3] = 0 # setting this to anything other than 0 fixes the problem
|
|
green[-2, -3] = 1
|
|
blue[-2, -3] = 1
|
|
|
|
# fill in all of the black region with 0-red color
|
|
# red[:,border_right:] = 0
|
|
# green[:,border_right:] = 1
|
|
# blue[:,border_right:] = 1
|
|
|
|
# write PIZ compressed via OpenEXR
|
|
header = OpenEXR.Header(width, height)
|
|
header['compression'] = Imath.Compression(Imath.Compression.PIZ_COMPRESSION)
|
|
exr = OpenEXR.OutputFile("gen.exr", header)
|
|
exr.writePixels({'R': red.tobytes(), 'G': green.tobytes(), 'B': blue.tobytes()})
|
|
exr.close()
|
|
|
|
# read back in via tinyexr (used internally by simpleimageio)
|
|
tinyresult = sio.read("gen.exr")
|
|
sio.write("test2.exr", tinyresult)
|