|
|
- 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)
|