X-Git-Url: http://users.mur.at/ms/git/gitweb/?a=blobdiff_plain;f=aces_1.0.0%2Fpython%2Faces_ocio%2Fgenerate_lut.py;h=fd2aa5d0fa8aad907c7bb619e38393822d987129;hb=17ca8bd58c0fb24dd81fe70169268d39525bdeb7;hp=4ed78fe92fc27abdf5ea3bb0978edd17afb3110b;hpb=1c4efc5c67e2313dfadf4a0786baaabd8d6489a6;p=OpenColorIO-Configs.git diff --git a/aces_1.0.0/python/aces_ocio/generate_lut.py b/aces_1.0.0/python/aces_ocio/generate_lut.py index 4ed78fe..fd2aa5d 100755 --- a/aces_1.0.0/python/aces_ocio/generate_lut.py +++ b/aces_1.0.0/python/aces_ocio/generate_lut.py @@ -6,6 +6,8 @@ Defines objects to generate various kind of 1d, 2d and 3d LUTs in various file formats. """ +from __future__ import division + import array import os import sys @@ -36,8 +38,8 @@ __all__ = ['generate_1d_LUT_image', def generate_1d_LUT_image(ramp_1d_path, resolution=1024, - min_value=0.0, - max_value=1.0): + min_value=0, + max_value=1): """ Object description. @@ -76,7 +78,13 @@ def generate_1d_LUT_image(ramp_1d_path, ramp.close() -def write_SPI_1d(filename, from_min, from_max, data, entries, channels): +def write_SPI_1d(filename, + from_min, + from_max, + data, + entries, + channels, + components=3): """ Object description. @@ -94,15 +102,19 @@ def write_SPI_1d(filename, from_min, from_max, data, entries, channels): Return value description. """ + # May want to use fewer components than there are channels in the data + # Most commonly used for single channel LUTs + components = min(3, components, channels) + with open(filename, 'w') as fp: fp.write('Version 1\n') fp.write('From %f %f\n' % (from_min, from_max)) fp.write('Length %d\n' % entries) - fp.write('Components %d\n' % (min(3, channels))) + fp.write('Components %d\n' % components) fp.write('{\n') for i in range(0, entries): entry = '' - for j in range(0, min(3, channels)): + for j in range(0, components): entry = '%s %s' % (entry, data[i * channels + j]) fp.write(' %s\n' % entry) fp.write('}\n') @@ -110,8 +122,9 @@ def write_SPI_1d(filename, from_min, from_max, data, entries, channels): def generate_1d_LUT_from_image(ramp_1d_path, output_path=None, - min_value=0.0, - max_value=1.0): + min_value=0, + max_value=1, + channels=3): """ Object description. @@ -131,16 +144,17 @@ def generate_1d_LUT_from_image(ramp_1d_path, ramp = oiio.ImageInput.open(ramp_1d_path) - spec = ramp.spec() - width = spec.width - channels = spec.nchannels + ramp_spec = ramp.spec() + ramp_width = ramp_spec.width + ramp_channels = ramp_spec.nchannels # Forcibly read data as float, the Python API doesn't handle half-float # well yet. type = oiio.FLOAT - data = ramp.read_image(type) + ramp_data = ramp.read_image(type) - write_SPI_1d(output_path, min_value, max_value, data, width, channels) + write_SPI_1d(output_path, min_value, max_value, + ramp_data, ramp_width, ramp_channels, channels) def generate_3d_LUT_image(ramp_3d_path, resolution=32): @@ -207,8 +221,8 @@ def generate_3d_LUT_from_image(ramp_3d_path, output_path=None, resolution=32): def apply_CTL_to_image(input_image, output_image, ctl_paths=None, - input_scale=1.0, - output_scale=1.0, + input_scale=1, + output_scale=1, global_params=None, aces_ctl_directory=None): """ @@ -288,13 +302,14 @@ def generate_1d_LUT_from_CTL(lut_path, ctl_paths, lut_resolution=1024, identity_LUT_bit_depth='half', - input_scale=1.0, - output_scale=1.0, + input_scale=1, + output_scale=1, global_params=None, cleanup=True, aces_ctl_directory=None, - min_value=0.0, - max_value=1.0): + min_value=0, + max_value=1, + channels=3): """ Object description. @@ -340,7 +355,8 @@ def generate_1d_LUT_from_CTL(lut_path, generate_1d_LUT_from_image(transformed_LUT_image, lut_path, min_value, - max_value) + max_value, + channels) if cleanup: os.remove(identity_LUT_image) @@ -426,8 +442,8 @@ def generate_3d_LUT_from_CTL(lut_path, ctl_paths, lut_resolution=64, identity_LUT_bit_depth='half', - input_scale=1.0, - output_scale=1.0, + input_scale=1, + output_scale=1, global_params=None, cleanup=True, aces_ctl_directory=None): @@ -518,10 +534,10 @@ def main(): p.add_option('--ctlReleasePath', '-r', type='string', default='') p.add_option('--bitDepth', '-b', type='string', default='float') p.add_option('--keepTempImages', '', action='store_true') - p.add_option('--minValue', '', type='float', default=0.0) - p.add_option('--maxValue', '', type='float', default=1.0) - p.add_option('--inputScale', '', type='float', default=1.0) - p.add_option('--outputScale', '', type='float', default=1.0) + p.add_option('--minValue', '', type='float', default=0) + p.add_option('--maxValue', '', type='float', default=1) + p.add_option('--inputScale', '', type='float', default=1) + p.add_option('--outputScale', '', type='float', default=1) p.add_option('--ctlRenderParam', '-p', type='string', nargs=2, action='append')