why it doesn't work the way most people think it does, and how to make it work the way it should work.
Take a look at televisions in a TV show, or monitors in a computer shop, and it's easy to see that they all render colours differently. It's easiest to see with TVs as they're usually showing all the same images, and they're pretty crudely calibrated. If you're a photographer then colours are pretty important, and you'll want to see the same colours coming from your monitor as you saw when you shot the picture. You may also want to be sure that anyone else viewing your images sees what you intend them to see.
That's ok, you think, because we have "Colour Management" to sort all that out for us. You just buy a Spyder or similar device, run the software which comes with it, and it's all good, right? Wrong... if you're a Windows user at least, that's not enough.
In fact Windows Vista (or any earlier MS OS) isn't colour managed in the way most people think it is, or think it should be. "Ah", you say, "but Windows Vista has a little 'colour management' dialog box where I can make it use my monitor profile, and the display changes colour when I use my Spyder, so it's all handled for me isn't it?"
Actually no it isn't.
Windows will let you store the name of a colour profile along with your display, and it'll let you run some software to calibrate your graphics card (a Look Up Table/LUT loader), but it doesn't actually munge the stuff sent to the display according to that profile for you. That would be too easy... instead it lets the applications take care of the munging for you. Which most of them don't do. So Windows Explorer, or Internet Explorer 7 just ignore that profile you spent so much time and money creating. Most internet witterings will tell you otherwise, but it's easy to test it yourself or even read Microsoft's technical documents. Actually the MS documentation talks interestingly about the infrastructure of WCS at a lower level than is helpful here. Mocrosoft's MSDN is more useful in describing which bits of WCS are implemented in 1.0 (which is what you get in Vista). Here's a relevant extract. The key phrase is "little overhead": the application has to explicitly ask Vista to Colour manage output; it doesn't happen by default.
Most people think that colour management is important for (say) browsers because it means that the browser reads and uses any profile embedded in an image.
Whilst that may be a very civilized thing for a browser to do, it's not relevant to most of us as most people don't embed profiles into images for web display. Indeed, it's not possible for all image formats.
In any case, Colour Management such as that described here is necessary for the browser to render images accurately irrespective of if they've a profile embedded in them or not.
On a fundamental level, almost any application should be able to adjust color automatically so that its output looks the same on different monitors and printers. WCS 1.0 provides a set of functions to deliver this kind of color management that is transparent to a user and requires little overhead in the application.
So there you go - an application running on Windows can use WCS to achieve correct colour output.
Let me say that again, as 99.9% of information I can find on the net gets this wrong, so I want to be clear on it:
Don't believe me? Try this: create one or more wildly incorrect monitor profiles. Assign them one by one to your monitor using Windows Vista. Nothing happens... Vista will remember what the profiles you set are, but it is not applying them to the stuff it's displaying. Specifically Windows Explorer (your desktop and folders) ignore the profile. In a non-colour-managed Operating System, dealing with Colours is the job of the applications.
Having assigned a "bad" profile to your display and noticed that Windows doesn't use it, try running a Colour-Managed application such as PS/CS3, FireFox3 (with CM enabled - not a default option), or Windows Photo Gallery. These applications read the Colour Profile from Windows and use it to munge their output, which they then send to Windows for display. If you can't see any difference between the colours shown by these applications, you may not have a non-trivial monitor profile in use.
Instead of the operating system doing the work for everyone, each application has to separately do it. Whilst it's the same work wherever it's done, the problem is that you may well have some applications which correctly take note of the monitor profile, and others which don't.
From the above, you can see that a browser has to do work to display the colours of images or html correctly. It's got to read the profile for your monitor (which it gets from the OS), and then it's got to use that, plus any profile embedded in the image (or marked in the CSS for HTML), and using that data it can translate the colours to what the originator intended. Assuming the originator was using a colour managed system, of course.
I should first say that this is mostly an issue for users with a calibrated, colour managed system. Those without will generally adjust their monitors to "something which looks right". This is usually a pretty close approximation because the eye's quite sensitive to colours (which is why we're mucking about with this in the first place). Unfortunately if you invest in some calibration equipment and calibrate your monitor things get worse. That's because as above, a calibrated monitor relies on the monitor profile for output, so output from any application which ignores that profile is generally a great deal worse than in the totally unmanaged case, where the user at least has the benefit of being able to "tweak the knobs" on the monitor. With flat screens and DVI you tweak the graphics card LUT, but the principle's the same.
Generally photographers worry about colour management of images, but if you're building a web page you'll likely want to match colours across the page, which means you need to Colour Manage your text (html) as well as images.
The sRGB standard proposed how this could be done, essentially by adding colour tags to the CSS standard, with the default being sRGB as expected. This was picked up by CSS3.
As an aside, CSS3 also allows web page designers to override either the default or any embedded profile in an image. That's not considered here.
Hence it's quite important for people using a calibrated system to have applications which are "Colour Managed".
So here's what we have so far, as of July 2008...
I had great hopes for Safari 3 - it was going to conquer the PC by bringing colour management to us poor benighted people. Except it didn't... According to Apple's disciples the colour management for Safari on the PC was deliberately crippled to avoid colour matching problems with Flash. Plug-ins are responsible for rendering their own output, so they need to be colour managed just the same as the browsers they are in - I didn't say this was a good architecture! Anyway, although the masses out there generally think Safari's colour managed, it's actually only so for images which are explicitly tagged with their ICC profiles... which is almost none of the web. So in practice Safari/PC behaves just like the bad unmanaged browsers we are all used to.
The W3C is quite clear on what Safari should be doing here in "A Standard Default Color Space for the Internet - sRGB". The clue's in that "standard default" bit:
Browsing Scenarios
2. Image not in sRGB, does not have an embedded ICC profile, and system has a monitor/output device ICC profile
Since the image has no ICC profile, it is assumed to be in the sRGB color space. In this scenario, the resulting image will be consistent across devices; however it could be different from the original image.
This is a specific application responsibility which Safari ignores. That's rather a bad idea. If you're producing images, you want to know how they'll look to the people who are viewing them... which is precisely why the standard's there. At this point you tend to hit religious issues, with Apple fans swivelling around trying to avoid the fact that their beloved is actually breaking the rules. Meanwhile the rest of us vote with our mice: Safari/PC's useless for colour work - you're actually better off using something like IE7, which at least is consistent.
Colour Management, nein danke. Nothing to see here I'm afraid.
Game over: a colour managed browser on Windows. You have to explicitly enable colour management, which I suspect is because the plug-ins (eg Flash) are not yet colour managed and so you could well have confused users if this was enabled by default. As it is, if you switch it on you definitely at least have some idea that you're tinkering with the colours, even if (to judge by 100% of the internet reviews I've seen) you completely miss the point. Which is, not that the browser reads embedded profile, which almost no-one uses, but that it reads and uses the monitor profile, which everyone with a colorimeter needs it to do. In other words the colours output by FF3 will match those of PS/CS3 for any website you happen to look at.
Once you get to FireFox 3 and you switch the colour management on the next obvious issues is Flash, which at 9.* isn't colour managed. The good news is that Flash 10 is slated as being so, although as of the minute the beta version isn't delivering the colours. Once this reads and honours the monitor profile we can all go and worry about something else.
This is an interesting area because although there is lots of information about Colour Management on the web, most of it's incorrect. The incorrect information seems to be plagiarized from other incorrect information. It seems that most people find it easier to propagate dubious data than do their own research. An increasingly common problem in academia, I'm told. In this case it's unnecessary, as you don't actually need to understand physics to see colour, and it's fairly easy to experiment with it. Much of the stuff I've read is horribly complicated and confused - the authors don't seem to have a clear grasp of what they're trying to impart.
Here's what I've found and how I found it. I'd rather you didn't quote me without reference to the original here.
These tests are only relevant for Windows.
The following charts are all identical (see details). The originals are in sRGB. The only other gamut used here is Adobe RGB (1998) which is wider than sRGB, with conversion from sRGB to Adobe RGB with "perceptual" rendering intent. Hence when correctly rendered the charts should be identical. On a calibrated system the images should also be "correct".
This test shows four identical charts plus a html representation of the same colours. What you see on a Windows system depends on what you're looking at it through.
untagged sRGB
tagged sRGB
tagged Adobe RGB
sRGB Flash movie
html
The first three charts look identical, and match the colours in the html swatches. The first two images look identical because FF3 follows sRGB and assumes the untagged image is sRGB. The third image was converted with "perceptual" rendering intent so it looks the same despite the different colour gamut (see above), and of course FF3 is honouring the embedded profile and converting through the monitor profile. The Flash image is rendered via the plug-in which (at Flash 9 and earlier) is not colour managed, so that's not using the monitor profile and hence looks wrong. The html swatches are correct as Firefox correctly assumes untagged html such as this is sRGB and renders it as such via the monitor profile.
Nothing's rendered correctly. The first, second and last image plus the html are identically incorrectly rendered. IE7 does not use the monitor profile; it doesn't read or use embedded profiles; it doesn't render html correctly; and Flash is not currently colour managed. The third image is also incorrectly rendered, but in a different way. This is because the image is in Adobe (RGB), which has slightly different colour values from the default sRGB. IE7 is assuming all images are default however; it does not see the embedded profile and so renders the image incorrectly.
The two outer images (untagged and Flash) are identically wrong as neither is rendered with the monitor profile. The two inner images are identical as both are correctly rendered. The html is incorrectly rendered; Safari/PC only Colour Manages images with embedded profiles (odd but true).
Your CS3 has probably been colour managed since, what was it, version 5? It's useful to compare the correctly rendered output from that with the web browsers, assuming you're confident of the CS3 settings of course.
The way PS/CS3 displays Windows screen grabs (Alt-Print Screen) from various applications is slightly counter-intuitive. I'd expected that a straight screen grab of a correctly colour-managed Firefox screen pasted into Photoshop would have shown the correct colours - after all they're both colour managed applications. It's not so - the pasted image is displayed with incorrect colours. Well, Windows isn't colour managed, even if each application is individually.
Looking at a screen-grabbed IE7 image provides a clue. An untagged (=> sRGB) image which displays incorrectly in IE7 appears to be displayed correctly on paste of the screen grab into a PS/CS3 buffer in sRGB. In fact that's how I used to check the colours of web things before FireFox 3. So the screen grab isn't being smart enough to take into account both the image's bits and the colour space they're in; rather it's just taking the image bits. Hence PS will display the bits from IE7 correctly (if you paste sRGB into an sRGB buffer), but it displays those from FireFox incorrectly, because they have already been transformed but PS is unaware of this.
This doesn't really fit here, but I need to make a note of it so I don't forget it in the future - the PS/CS3 help files are unclear on precisely what their soft proofing features do. Here's what they seem to do based on my tests.
If the LUT was as flexible as the ICC profile, then you'd not really need both, as you could simply use the LUT to do all your colour mapping. Hence I suspect it isn't. Probably it works like three knobs, one each for R, G and B. So you're probably setting three little curves with that table. I'd like to see the definition of the tables and compare that with the ICC profile definition so I can be sure what's in there and why.
Is of the essence. All this is changing pretty quickly and should be irrelevant quite soon. Flash 10 when released is supposed to be colour managed, although the beta 2 release is not yet working that way. I'd expect Safari/PC to be fixed assuming FireFox 3 is well received, which I think it should be. Rumor has it that it's to be fixed in version 4. Opera etc will likely follow, with probably Internet Explorer coming along only when it's otherwise isolated. I'd be surprised if future versions of Windows continue with the current architecture as I've seen no sensible rationale for it.
There's more incorrect imformation out there than good stuff I'm afraid, but here are some useful primary references:
All images ©copyright phil wigglesworth unless otherwise stated. It is against uk and international law to steal, copy, print, deep-link, or do anything other than look at my pictures here without explicit written permission from me as copyright owner. Ignorance of this does not constitute a defence in uk law. Everything's for sale, and I may allow non-commercial use of unadulterated images in exchange for a credit. All images are watermarked and tagged to aid identification and location.