ICC profiles are stored in JPEG application files. These blocks are designed to ensure that applications store any data they need, so they do not comply with the JPEG specification. In other words, the JPEG file format does not determine how to embed color profiles, you just see the actual ways to execute it.
Since application segments can be used by anyone for anything, you need to identify and verify the content before you can say for sure that it contains an ICC profile.
Thus, three ways to share ICC profiles can be provided:
- By embedding the ICC profile in the application segment 02, added with
ICC_PROFILE\0x00\0x01\0x01 to identify it. Currently, I'm not sure if two \0x01 mean anything, or if they are always like that. After these 14 characters, the actual ICC profile is saved. - Embedding the ICC profile in the embedded EXIF metadata file in the application segment 01.
- Embedding the ICC profile in the embedded XAM metadata file in the application segment 01. This is added using
http://ns.adobe.com/xap/1.0/\0x00 .
I also could not find any specific information. It would be nice if the ICC said, “this is how to do it,” but I have not yet been able to find one. Thus, as far as I know, any of them can potentially be used as an ICC profile, and this will depend on the application about whether it will download the profile or not. The application segment 02 seems to be the usual way to execute it, although what you want to test may depend on your use case. As another comment showed, some HELIOS EtherShare programs have their own way of doing this. (I have not yet confirmed the presence of the ICC profile in the metadata, however I really did not look so strong, and it would not surprise me if you could find files with several conflicting ICC profiles in the wild.)
source share