OpenImageIO
OpenImageIO is a library for reading and writing images, and a bunch of related classes, utilities, and applications. There is a particular emphasis on formats and functionality used in professional, large-scale animation and visual effects work for film. OpenImageIO is used extensively in animation and VFX studios all over the world, and is also incorporated into several commercial products.
Main features include:
Simple but powerful ImageInput and ImageOutput APIs that provide an abstraction for reading and writing image files of nearly any format, without the calling application needing to know any of the details of these file formats, and indeed without the calling application needing to be aware of which formats are available.
Format plugins for TIFF, JPEG/JFIF, OpenEXR, PNG, HDR/RGBE, ICO, BMP, Targa, JPEG-2000, RMan Zfile, FITS, DDS, Softimage PIC, PNM, DPX, Cineon, IFF, Field3D, Ptex, Photoshop PSD, Wavefront RLA, SGI, WebP, GIF, and a variety of "RAW" digital camera formats, and a variety of movie formats (readable as individual frames). More are being developed all the time. The plugins are really good at understanding all the strange corners of the image formats, and are very careful about preserving image metadata (including Exif, GPS, and IPTC data).
Several image tools based on these classes, including oiiotool (Swiss army knife command line tool that does practically all image processing and conversion), iinfo (print detailed info about images), iconvert (convert among formats, data types, or modify metadata), idiff (compare images), igrep (search images for matching metadata), and iv (image viewer). Because these tools are based on ImageInput/ImageOutput, they work with any image formats for which ImageIO plugins are available.
An ImageCache class that transparently manages a cache so that it can access truly vast amounts of image data (thousands of image files totaling hundreds of GB) very efficiently using only a tiny amount (tens of megabytes at most) of runtime memory. Additionally, a TextureSystem class provides filtered MIP-map texture lookups, atop the nice caching behavior of ImageCache.
An ImageBuf class that makes it easy to deal with whole images, and a whole bunch of image processing algorithms (in the ImageBufAlgo namespace) that operate on them.
C++ and Python bindings.
Supported on Linux, OS X, Windows, and FreeBSD.
All available under primarily the Apache-2.0 license (with a small amount of pre-July-2023 code under the BSD-3-Clause license), so you may modify it and use it in both open source or proprietary apps.
You can find the main documentation here: OpenImageIO on Readthedocs
Mail Lists
oiio-dev For developers of the OpenImageIO code itself, or users who are really interested in the OIIO internals. This is where we mostly discuss the code (including bug reports), but are also happy to answer user questions about use or working of OIIO.
You can sign up for the mail list on your own using the links above.
Downloading and building the code
Our code is hosted on GitHub: https://github.com/OpenImageIO/oiio
The release branch is very stable and promises to never break back-compatibility with APIs or linkage within that release. The master branch is where new development happens; it tends to be very solid code but its APIs may change at any time.
You can also directly download a zip file of the source code:
At present, there is not a separate precompiled or binary-only distribution of OpenImageIO (though we hope to eventually have one). For now, you'll have to build the code yourself.
Read access to the main git repository is available for anybody. Commit access is restricted to senior developers. Though you are of course welcome to "fork" the repository to create your own work area on GitHub.
Please refer to Installing OpenImageIO for details on how to check out and build OpenImageIO.
Please refer to Contributing to OIIO for various rules and procedures for developing OpenImageIO.
Contact
For more information, contact Larry Gritz.