When using native transforms or ImageOptimize, embedded color profiles are stripped out of the resulting files. Transforms created with Imager plugin using default settings preserve color profiles when using the same asset source.
I have the following parameters set in my general.php:
'preserveImageColorProfiles' => true,
'imageDriver' => 'imagick',
'preserveExifData' => true
'preserveImageColorProfiles' => true Original (Embedded color profile: “AdobeRGB”)

Imager Transform (Embedded color profile: “AdobeRGB”)

Craft Transform, setting: _Quality: Very High_ (No color-space metadata and no embedded color profile)

I can confirm that I'm able to reproduce this on Craft 3.3.16.1. I'll dig a bit deeper, see what's what.
Actually, I had left the preserveImageColorProfiles setting to false on Craft 3.3, so I can't really reproduce that.
Can you try updating to the latest Craft version and see if the image persists? Also, make sure that you're not getting cached versions of the transforms.
Also please disable Image Optimize from Settings → Plugins before generating new transforms. Have a feeling that’s the culprit.
Brandon, you're correct - disabling ImageOptimize solved the issue. I wasn't aware that ImageOptimize transform settings are used by the native transforms when enabled, I will check in to see if that can be made more clear. Thanks!
@sonoflee ImageOptimize hooks into the Asset transform process and replace it with its own, rather than transforms using the ImageOptimize settings :)
(cc @khalwat)
@sonoflee @andris-sevcenko So ImageOptimize uses Craft to do the transforms, but what does happen is the image optimizers are run post facto.
Feel fee to contact me to discuss further, but it's likely that you're using one of these optimizers:
https://github.com/nystudio107/craft-imageoptimize/blob/v1/src/config.php#L159
...and one of its optimizations is to strip the color palette. You can fix that by adding an appropriate flag for the optimizer that you're using.
@khalwat Thanks, that is exactly what was going on! I have updated the webp/png/jpeg optimizers I'm using with flags to preserve profiles, and things are working great now.
It wasn't clear to me that these optimizations would also be applied to native craft transforms (i.e., those not created in the ImageOptimize fields) as well - but I admit I might not be the most thorough documentation reader around, so not sure if it would be worth spelling this out further in the docs in case anyone runs into the same issue.
Thanks to everyone for pointing me in the right direction!
Most helpful comment
@sonoflee @andris-sevcenko So ImageOptimize uses Craft to do the transforms, but what does happen is the image optimizers are run post facto.
Feel fee to contact me to discuss further, but it's likely that you're using one of these optimizers:
https://github.com/nystudio107/craft-imageoptimize/blob/v1/src/config.php#L159
...and one of its optimizations is to strip the color palette. You can fix that by adding an appropriate flag for the optimizer that you're using.