The easy way to do it from Python is to load it as an ImageBuf, use 
ImageBufAlgo.channels() to copy just the channels you want to a second 
ImageBuf, then save it. Basically:

    inbuf = ImageBuf ("allchannels.exr")
    outbuf = ImageBuf()
    ImageBufAlgo.channels (outbuf, inbuf, ("R", "G", "B"))
    outbuf.write ("justRGB.exr")

I would expect that to be the same speed as oiiotool, since that's what's going 
on under the covers anyway (the oiiotool may still beat it, because it's pretty 
well tuned with all the options, has pretty good thread management, and no 
Python overhead at all).

I think that basic path (read, IBA::channels(), write) is about the best you're 
going to do using only the OIIO APIs.

There are ways (in the underlying libIlmImf, but not exposed by OIIO) that you 
can read uncompressed chunks, but if what you're after is to extract only 
certain channels, the data for those channels are scattered around variously 
within the compressed block. So I don't see how you could do it without 
uncompressing the whole chunk, copying out the individual channels you want, 
and then re-compressing. Which is basically what oiiotool/channels() is doing. 
I doubt you could make it substantially faster without getting extremely clever 
and low level with your own compression code.

        -- lg

> On Apr 9, 2018, at 4:35 PM, Yegor Swarovski <> wrote:
> Hello, just a simple question - I want to use OpenImageIO to open an image 
> file, strip out all but a few channels, and save it again. I have found how 
> to do this with oiiotool's -ch flag but I am curious to try this with the 
> OpenImageIO in python and see if that has some faster performance.
> My question is whether this is possible to do without touching any actual 
> pixel data - I am not sure how EXRs are stored or compress data so I am not 
> sure if it is possible to simply open an ImageInput or ImageBuf, delete some 
> channels, and save it again, or if I will need to start copying pixels/image 
> data to a second ImageBuf.
> Thanks!

Larry Gritz

Oiio-dev mailing list

Reply via email to