You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(png): alpha premultiplication adjustment and attribute
See discussion AcademySoftwareFoundation#4054
and PR AcademySoftwareFoundation#4315
In PR 4315, we fixed PNG read/write to do the required
premultiplication in linear space (that is, linearize, multiply by
alpha, then go back to the sRGB or gamma space). Which we really
believe is "correct." Except that maybe there are a ton of
incorrectly made PNG files out there (maybe most of them?) where
partial alpha pixels had their premultiplication occur on the sRGB or
gamma values directly.
In this patch, we partly revert, allowing both potential behaviors,
controlled by an attribute "png:linear_premult", which instructs the
PNG driver to do any premultiplication in linear space if it's set to
nonzero. It can be set globally (via `OIIO::attribute()`), as well as
set/overridden on any individual file by setting the attribute in the
configuration hints for an ImageInput or in the spec for an
ImageOutput.
As presented in this patch, we're setting the default to 0, meaning
that by default we are reverting back to the old behavior of doing the
premultiply of partial alpha pixels on the direct values intead of in
a linear space. Applications or sites that are confident that any PNG
files they encounter are "correct" can set the attribute to do the
multiplication linearly.
I'm not 100% confident about the default, and so am very happy to
entertain arguments for keeping the default set to do the
multiplication in linear space.
Signed-off-by: Larry Gritz <[email protected]>
0 commit comments