WWDC2003 Session 206

Transcript

Kind: captions
Language: en
I'm Travis Browne and the graphics
engine and imaging evangelist and you
know I think it's a you know I'm really
sort of pleased to talk to you about
some of the directions of apples going
on with terms of color management
because one thing that's really
important for Apple is getting correct
color for our users and our developers
because nothing is more frustrating for
user when they have all these color
input devices color output devices and
they try to use them and they get
different color on the screen they get
that for a different color on their on
their inkjet printer or they're you know
they're someone views a different color
when they send a PDF to another platform
so I think it's important that you
understand that Apple is very serious
about color and we've delivered the
pretty much the only color managed
operating system that's on the market
today and how we've accomplished that
feat is by taking our color sync
technology which has been with us for a
sniffing a period of time which was
essentially an opt-in technology a
technology that developers had to go to
extra lengths embrace and utilize and
certainly that made sense and high-end
publishing but now what we want to do is
make sure that the whole OS at reacts to
the proper way to color management image
profiles and whatnot and so what we've
been doing is essentially building color
sink in at lower and lower levels
fundamental you know integrate
integration in the operating system and
as you know for example one major
announcement that was made I think it
was yesterday was the fact that click on
image importers now are going to respect
color profiles which is very significant
because that means that practically any
application that uses QuickTime n is an
importer for services is now going to do
the right things with regards to
profiles but in the fact that we
continue to build colors think more and
more in at sort of the core DNA of the
operating system we wanted to make sure
that we continue to innovate and Express
color sink in interesting ways for both
our users and our professional users in
particular in addition to developers
with lots of new ways to access the
functionality so it's my pleasure to
invite David Hayward to the stage to
take you through the session
hi everyone welcome to the colors in
session we have a big talk topic to talk
about today on a wide range of subjects
let me kind of start out with a basic
outline of what we'll be talking about
today first of all for those of you that
are new to color sync or need a color
management I'll start out with a general
overview and then we'll start to talk
about some of the foundations upon which
color sink is built such as color sink
and it's device integration layers how
it ties in with quartz after that we'll
take a trip through some of the
high-level functionality that color
stink provides through color sync
utility and integration with other
systems like OpenGL and display
calibration after all after that's over
i'll be talking about something new
today which is something called sips
we'll save that for last the first of
all an overview of color sync for those
of you that are new the subject all of
you are I'm sure aware that there's a
wide variety of devices that we all work
with now from scanners to cameras two
displays big projectors printers both
PostScript and inkjet and all of these
devices as your all-seeing before
represent colors in different spaces and
with widely different behaviors and
different gamuts a range of colors that
they can represent and this presents a
fundamental problem that makes it very
difficult for content to move between
one device and another and the solution
of this problem is color stinking and
color singh provides a complete color
management system that's been designed
to provide continuing our consistent
color across this spectrum of devices
that said in addition to doing device
level color correction it can also be
used to do abstract special effects such
as q rotation and contrast enhancement
these kind of changes that may not have
may be very important to you as content
creator but may not be associated with
any particular device we'll come back to
that throughout the presentation this is
an outline of how colors think fits into
the overall system on Mac OS 10 at the
top we have high level applications such
as the ones that user at you right and
also applications such as color sync
utility and other tools that we provide
these are all built upon high level
application frameworks such as carbon
and cocoa which all in turn use our
a variety of graphics technologies that
we have on the system such as image
capture courts QuickTime and printing
the key thing about all these graphics
technologies that they all now make use
of color sync and this provides a core
service through the rest of the system
for dealing with color consistently and
correctly color stink is based on three
key foundations one is profile profiles
are binary data files which hold the
device characterization it describes the
way the device responds to color in a
device-independent way the other key
foundation that color sink is based upon
is device integration and this I'll talk
about more and more detail in a bit but
the basic idea is to be able to make it
so that color sync and Klein
applications can know what the current
profile for all the devices that are
connected to a computer are the other
third piece of foundation that colors
think is dependent upon our cmms or
color management modules and these are
the computational engines which are used
to actually perform color
transformations between one source
profile and another profile so that's
the basic outline of how a collar sink
fits into the system let me give a brief
simple example of how color sink is used
in everyday practice for example we have
an application that's calling color sink
it's either calling it directly or it's
calling it indirectly through other
graphics API but the scenario is
basically the same the idea is we want
to be able to acquire images for example
from a camera and we want to make sure
that when we get the image from the
camera that we also have a profile that
describes the way that camera responds
to color this profile can be embedded in
that image so now wherever that image
travels it will always be possible for
color sync to know the behavior of that
device and how that image represents
color and how the image is supposed to
look so once we have an image with an
embedded profile a color sync
application is going to then that want
to display that on the screen for
example color stain can determine the
profile for the screen and now given
these two profiles with source profile
for the camera and the destination
profile for the display colors distinct
can concatenate these two data files and
create what they call a color world this
color will can then be used to match all
the RGB values from the original color
space to the display color space in a
manner that creates the best possible
consistent color
a similar process occurs when it comes
time to print in this case color sync
determines what the death profile is for
the current printer in its current
settings and again the source data is
now matched from the source color space
to the destination printer profile this
is a very simple example here in reality
documents can be much more complicated
and the life of a document can be much
more long and drawn out so for example
this is a very conceivable operation for
example and a image can be acquired
through the image capture architecture
and they could then be added and edited
in the carbon application after that it
could be converted to a different file
format using some quick time tool and
then may be sent in an email to another
user who opens it in preview and print
it as soon as printing occurs there's a
whole new set of operations that start
to occur such as the data being
rasterized by courts sent through the
printer driver and ultimately sent as
bits to the inkjet printer so this is a
long chain of operations and each one of
these steps color management may be
involved or should be involved if you
want to get the best possible output
under Jaguar however there were a few
places in this chain where there were
potential weak links the places where
applications had to go to a little extra
effort in order to make sure that the
correct color management occurred for
example image capture architecture was
hindered by the minor fact that some
cameras didn't register profile this
meant that when it image was first
brought into the system there was no
profile to describe the image which
causes cause problems later similarly
when QuickTime api's were invoked to
modify an image apps had to go to a
little extra effort in order to
explicitly check for embedded profiles
this created a persistent problem which
was that oftentimes the same document
could be opened up in different
applications and depending on whether
that application respected the profile
or didn't you could get different
results similarly there was a dilemma
that occurred when it came time to print
which was that not all print drivers
registered profiles so one of our major
objectives for for Panther was to solve
these problems and then make it as easy
as possible for applications to get the
right output which is after all what we
all want
so we've made several changes in the
system to solve these solve these
problems one was an image capture we now
associate a generic camera profile for
all cameras if they don't register a
profile otherwise also as we've
mentioned earlier QuickTime now makes
the effort to respect embedded profiles
this is a very important change to the
system and means that that documents
will now look very consistent matter how
they're opened up lastly it is now
possible cut four cups PostScript and
raster drivers to register profile so
this is also a great story and that it
completes the picture at the output side
making sure that we have create profile
you have the correct profile at every
step in the process so as I mentioned
before one of the key foundations upon
which color snake is base is device
integration let me speak a little bit
about that in detail again as I showed
in the previous diagram we have color
sings which is based on one key thing
which is device integration and this
allows color thing to be able to know
what the profiles are for devices the
key feature of the device integration is
for novice users in the sense that now
with device proper device integration
when a device is connected a profile
will be automatically registered with
the system on behalf of the user this
means that even users who do not even
know about color stinks will get good
color output on their devices the way
this is accomplished is by automatic
registration automatic registration
involves registration of devices by with
their name and their ID different modes
of the devices based on ID and name and
a specification of a default or factory
profile for each device again the
objective of this is to make it so that
novice users will automatically get good
color results without having to do any
special settings or options however we
also want to make this a powerful
feature that expert users can take
advantage of as well and this is done by
supporting overrides of profiles with
device integration overrides are
something that calibration applications
will use in order to change the factory
profile with a calibrated profile it is
also something that an administrator can
do to override the default profile for
all users of the machine or of course
users as well can change the profile
they're liking lastly there is an API
for device integration so your
applications can become aware of
profiles as they become attached to the
machine through their devices let me
talk a bit more detail about the
automatic registration again this is the
key functionality that makes it very
easy for new user to get a good color
output this is accomplished in three
ways based on the three different device
managers first of all the windows server
whenever a display device is detected
will automatically query the display and
ask the display for its eated
information from that eated information
it will create a profile and register
that device for image capture similar
process occurs whenever a camera is
plugged in the if the driver supports
profiles it will tell image capture
about that profile and that will be
registered if it doesn't then a generic
camera profile will be registered
instead lastly for the print manager
profiles are registered for devices
whenever a print queue is created and
this happens in two ways depending on
what type of printer driver you have for
tioga printer drivers the print driver
returns to color sync a dictionary of
device names and device modes and the
profiles for each mode 4 cups drivers
this information is specified in a
postscript printer description file
which I'll talk about in a little bit
more detail now so now with PPD's
there's a new entry that we're proposing
this is very important for cups drivers
both proposed script and for raster
drivers because now it is possible in
the PPD for the for the file to specify
what the modes of a device are and what
the profiles are for each mode the
format for this is the new keyword cups
icc profile followed by a mode specifier
and a profile specifier the mode
specifier is a concatenation of three
fields the color model the media type
and the resolution any of these fields
can be admitted into the little means
that that mode will apply to any of any
model media resolution the profile
specifier is very simple as well all it
is is a standard path that's relative to
the
usershare cops profiles directory we
recommend that if you are going to be
installing profiles in this directory
that you should create a subdirectory
for your own driver so that you do not
conflict with other drivers profiles let
me show a simple example of this in
practice here you have a postscript
printer PPD file that is registering two
modes one for 600 x 600 DPI and one for
1200 x 1200 DPI and then the profile for
that so it's very simple so the best way
to show all this is to show it in action
so I'd like to bring up to the stage
Luke Walsh will be demonstrating the
device integration and speaking more on
other subjects thank you David can I get
the Machine number one on the screen
please alright so the automatic
registration of the device is really a
great story that we are promoting the
mac OS 10 but what I would like to start
with is to show you how user can get
access to the color sink device
integration database and how he or she
can decide what kind of profiles are
going to be used with the devices known
to the system so all this information is
available in coloring utility under the
devices tab as you see there are
different types of devices listed here
scanners cameras displays printers and
prefers and if for example i open the
cameras tab you can see that the Canon
Powershot s100 my favorite camera is
known to the system the information that
I'm looking here for is the profile this
camera or is device manager in this case
image capture registered for me a
default mode and it's actually profile
in the same time me as a user I have an
opportunity here and option given by
coercing utility to override this
factory profile and I could do that if I
desired so by assigning any of the
profiles that I can choose but in this
particular case of the camera I was
quite
pleased with the results so I didn't
need to do that the next on the list are
displays same information is available
here i have the same option to override
the factory profile register
automatically and as a curiosity we
actually had to override it because we
wanted to have colors look right on the
display the video is the split through
the splitter and the same image is
displayed on the screen so in order to
get the colors better as you see we
overrode the original automatically
registered profile with the profile that
we created just a few moments before the
session started and the next group of
devices i would like to talk about our
printer as you heard from david there
are different types of printers
supported in Margo's then there are
cayuga roster printers which citric
typically comes with OEM custom drivers
there are postscript printers and last
not least the cops roster printers so I
selected the one represented
representatives for each of those and
the first on the list is canon s 450
which is controlled by the tioga driver
and this driver registered one mode and
one taxi profile when I was browsing
through the contents of the driver
package I discovered that there is a
slightly newer version of the profile
for this printer so i use my option here
and i overrode the original one with
slightly newer profile the next on the
list is probably very well known for you
apple laserwriter pro 6 30 this is a
very old printer manufacturer at some
point of time by Apple but the reason I
chose this particular printer was that I
was able to find a tpd which would
declare a profile for this printer the
way they described as a moment ago and
as you see the name of this profile is
laserwriter pro 6 30 profile and is
located in user share cups profile as a
writer but
looks like we didn't do here what David
was suggesting we did not create our sub
folder for profiles the next on the list
is style of CA T which is controlled by
the cops GIMP print driver and the
reason why I chose this particular
printer is because I wanted to show you
what is going to happen if there are no
profiles in the PPD in this case
printing system will find out all the
color models supported by this printer
and will by default to register these as
the mode of operations with color sync
so even though there are no sexually
profiles available me as a user I have
either user has an option to assign my
own profile to this device for specific
mode and as a matter of fact I had built
two profiles for this printer CMYK and
RGB and I used colors and utility of to
assign these profiles in the case when
there is no profile available for a
given mode of operation the printing
system will provide on-the-fly a default
profile which will be used in the case
when we need to do color conversion to
this particular model color process
color models give me so in conclusion of
this little demonstration I would like
to say that all devices color devices
known to this system will be represented
by a set of ICC profiles corresponding
to their modes of operation and the most
important use of this of these profiles
is obviously to do the color matching
but in the same time these profiles are
available to other system components
into applications and can be using a
variety for variety of reasons for
example as very coercive II application
can figure out the device gamma or find
other properties of this device or the
profile can be used for device
simulation soft proofing and things like
that
so now let's switch to slides so I can
get the projector let's start with
taking a look at the very typical
scenario of an application which goal is
to acquire the data from the color
device input and reproduce it on variety
of different color output devices like
displays printers or export this data in
the PDF format there are two main points
that I would like to make using this
slide first of all as you can see there
is one common component for all the
operations that I described and this
component is color think another point
is that as you see the application
doesn't have to necessarily go all the
way to color things but it can use other
system components which handle things
like color data acquisition or core data
creation because color thing is
integrated into those components let's
take a look at the color data
acquisition the component which is the
closest to the input device in this case
the camera the image capture device
module is responsible for transferring
the data from the device into the system
and if the camera happens to attach a
profile to each individual image then
this module will take care of passing
the profile through the old layers of
image capture to the application but if
there is no profile attached to the
image image capture will consult color
think device integration database and it
will retrieve appropriate profile for
this device when we take a look at the
process of color data creation we can
see that there are two components which
are always present here besides color
thing there is
court which is the Mac os10 graphics
system based on the PDF imaging model in
this particular scenario color thing
will be used in to full extent of its
functionality will provide the profile
for the destination devices but in the
same time will be used for converting
the data using profiles for the devices
source color spaces and using the
register CMMS so this slide leads me to
the topic I would like to focus on today
which is the integration of color single
cords our high-level objective here is
to integrate graphics and color
management by satisfying several basic
requirements first of all we will like
to have a centralized color matching for
consistent results another very
important requirement is the ability to
composite different color spaces and
opacity to satisfy this requirement
color thing will be used to convert the
data from many different source color
spaces into court compositing space this
also has to be a scalable solution in
the sense of working with variety with
different applications on one end we may
have those old legacy applications which
don't know anything about color
management or they don't want to
participate in color management so for
these court needs to provide some
default settings and make sure that
these applications can work seamlessly
with the rest of the system which is
very core management centric the most
desirable model for the application is
the one which in which application uses
calibrated color what I mean is
everything is properly tagged and so the
system can easily collect this data from
the application and do the right thing
when the data is to send two different
kind of output devices in the realm of
calibrated color we may have the very
high end up
patience which may desire to do the
color management completely on their own
so course also has to work with
applications like that other important
requirements are color accuracy
performance and PDFs compatibility for
those of you who may be new to this
topic let me very quickly go through the
few of basic ideas pertaining to color
in PDF comparison to those in icc and
color think and then see how we
implemented that in court as you may
know the color spaces in PDFs are
defined by the set of known color spaces
which can be divided into three
different groups there are legacy device
color spaces calibrated color spaces and
finally ICC base color spaces as you may
know this list also reflects in some
sense the history of color management
where initially only device color spaces
were known but as we know today they
were really very bad for any kind of
color management and because the color
appearance is devised attendant to
address this problem calibrated color
was invented along with the idea of
color matching through devising
dependent color spaces and over the
years the concept of calibrated color
evolved into icc profiles which now are
the de facto standard among color
professionals and can be embedded in
almost all known data format support in
color another concept important from the
color management point of view in PDF or
color conversion which can be described
as a function of source destination and
rendering intent the similar concepts
exist in colour singh and icc but the
only form of the colour space that we
use there is the icc profile and as i
mentioned an anomaly go today this is
the most general form of the color space
description the colour conversions in
icc and color think are some
what's similar to those in PDF with the
option for inserting intermediate
profiles between the source and
destination in court the color space in
essence is represented by one or more
ICC profiles this way we can preserve
the original PDF concept of matching a
single source to a single destination
but in the same time we can build those
multi stage and complex color transform
which are suitable for more advanced
color management like soft proofing
special effects color device simulation
etc etc and if the need arises to embed
such a color space in the document the
sequence of profiles can be concatenated
by color things into a single profile in
a bed in the document another important
rule that courts in some sense inherited
from PDF is the color space equivalent
this rule says that the color
conversions are necessary only is the
source color space is different from the
destination and Court is using this very
simple rule to properly or to organize
properly the flow of the color data
through multiple stages of rendering so
in a summary all color spaces inside
cords will end up as icc profiles the
easiest way to operate as you see is 3
by using ICT based color spaces because
we are just simply extracting the
profile from the color space definition
in the case of calibrated color spaces
those can be very easily repacked using
their calibration record in the form of
the profile and in the same time we
still have to support those legacy
device color spaces and in order to work
with these codes is going to use some
predefined default profiles there there
is a wide variety of ICC base color
spaces provided by court but I like to
focus on those which allow you to access
the
coercing device integration database an
example are the color spaces which allow
for drawing directly to the screen
examples of these color spaces more
specifically our display RGB color space
which is a in essence a wrapper around
the primary display profile another
color space like this is display gray
which as you can see is composed of 2
profiles device link converting grey to
RGB and then attached to the primary
display profile and for more advanced
uses which there are display color
spaces with ID which are rappers for
display by AV ID profile court also in
Panther helps to solve the problem of
drawing to multiple screens there are
two basic choices that applications can
make one as I call it a simple model in
which color is matched only to the main
display and the application doesn't take
any or make any updates on the screen on
profile change on the other end the
application can use what I call a
complete model in which the color will
be matched to individual displays the
application can register for
notifications on the screen or profile
change and make the proper update when
necessary and obviously there is some
possibilities for combining these two
profiles and come up with the
application specific solution to this
problem a very important aspect of color
management in Mac OS 10 is color
management in printing many of you may
already know that the printing Mac os10
consists of two main components the
front end and the back end the roll the
main role of the front end is to choose
the printer and collect the print option
through this for example through the
user interface and in the same time to
pull the print job into PDF the back end
job is to convert the spool PDF into
appropriate format for the printer that
we are going to print
our job lon if we take a closer look at
what is happening at the printing front
end we may notice that all color data in
this pool PDF is tagged with profiles by
definition we are not doing any printer
specific color conversions at the front
end but another important step is that
we are consulting the color sink device
integration database and extracting the
profile matching a current printing
condition what is happening at the back
end depends on the type of the printer
for the roster printers what we have to
do is to convert this pool PDF into
printer profile from the color
management perspective and for that we
extract the printer profile from the
print job and if the profile is not
there printing system will provide a
default profile so this matching can
occur for postscript we have two options
the first is traditional color matching
in the printer for this case all the
profiles from this pool PDF are
converted to postscript csa that in 10
sir we added a new option for poster
printers now we can do color matching on
the computer using Color sink in this
case we all we need to retrieve
similarly as indicates of rustler
printers the profiles for the current
print job from the from the print job
and if there are no profiles available
but we still want to do the computer
color matching by color think we'll be
using some default profiles in this
light a new edition of drawing directly
in colors in printer color space I think
is also very important that comes with
standard this color space is based on
the printer instance and current print
settings this way when the user clicks
on the print button in the
print dialog an application has a chance
to find out what our exact printing
condition in sense of the color states
and make the proper adjustments if
necessary another edition is printer
calibration API this API allows a
calibrator to submit a calibration
target in the form of a PDF file through
the calibration task to a specified
printer it requires specific calibration
target information through which the
calibrator can instruct the system which
color conversions have to happen and
which conversion must not happen a very
important subject that I would like to
mention here is importing and tagged
data to Mac os10 platform as you know
for many years we've been evangelizing
usage of the coercing default profile
for document and Court is exporting
these profiles in the form of user
default color spaces if the application
makes this first step of assigning the
user profile the whole color story of
Mac os10 looks much better because very
often is impossible from the death of
the operating system to find out where
this device data is coming from and the
not reassigning those profiles in the
depth of courts are sometimes difficult
the next very very powerful addition to
Panther our court filters in a nutshell
I would define the court filter as a new
optional component in the courts imaging
and color matching pipeline which allows
to associate a sequence of imaging or
color correction operation with a single
drawing the courts filter can act on all
drawings operations or only on the
specified set can be configured to
perform very specialized imaging and
color operations and finally can be
defined in saving XML so the
applications and users can easily
exchange those when we look at the ho
or architecture where the court filter
fit we see that our located right in the
middle of this structure and this is the
main reason why in Panther will make the
court filters available to the end user
only through the use of system build
utilities and applications but we will
be working on the proper ati to provide
access for applications through the
filters so this access is safe for both
the system and the application what that
like to do now is to give you a quick
demo of how the filters can be used on
Mac OS how those courts filters can be
used in Panther let's start with a very
simple example what I like to do is to
print the image which I acquired with my
camera and when I go to the print dialog
is the system yes and as you see a new
things added to printing is the
automatic soft proofing the my chosen
profile was a monochrome printer and
what I do is I soft prove it in the
print preview which is in addition to
previous print previews which mostly
we're concerned with the page layout I
can switch between the non unmodified
image and the soft probe image so this
is the first example of using court
filter the soft proofing is implemented
using soft proofing now let's take a
look at this image as you can tell is
this very very dark so I wonder if there
is something that I could do about that
if you go and you open the print dialog
one more time you will notice that on
Panther we added a new pde4 coercing and
this PDE allows me to first of all on
the postcode printer to choose which
option of color matching I'm going to
exercise I can perform color matching
on the computer using the printer
profile or I can fall back on the
traditional matching imprinting path in
addition to that I can apply court
filters right before the job is going to
be spooled into PDF and not quite by
coincidence I have a filter which I
called lighter color here which I'm
going to apply to this image before as
being spool to PDF and as I do that and
I preview my image now I can see that
it's much more readable and I would
print rather this image than the
previous one let's make one more trip
through the print dialog and look at the
last option in color sync pde as you saw
at the bottom of the court filter menu
there is an option for adding filters to
printing if I do that the document is
pulled into PDF and sends with the open
apple event too coercing utility which
opens it along with the filter inspector
as you see i have several filters
existing on the system and if i want to
see what they do i simply check the
preview a checkbox and as you see i can
convert everything to blue tone i can
use the opposite of the filter i applied
in the previous example which i call
darker color i can convert everything to
great on and so forth as you see i can
add and remove filters but what i like
to concentrate on are they is the usage
of filters for color conversion there
are many different options that i can
set with defaults but i don't think we
have time to go and examine all of these
so let's take for now to using the
filters just for color conversion the
first thing which i can decide here is
is I want to do all my color correction
on all objects in the document the same
way or I want to do different color
correction on different types of objects
the next thing is I can decide how to
use the rendering intent if I leave it
in the automatic setting the rendering
tent from the original document will be
used if not I can override it with my
choice of the rendering intent next what
I can do is to define the intermediate
transform which I want to be applied to
my document or the object depending on
the setting and in this pop-up you will
see all the profiles available on your
system which are appropriate for you to
be used as the intermediate transform
and finally I can convert the data to a
specified target and in this case the
list will be populated with all the
profiles that are that are suitable for
destination of the color matching so as
you saw coloring utility was able to
open in PDF document and indeed it can
open many different file formats
including PDF and postscript and all I
would like to do now is still show you
how i can use quartz filters to color
manage a PDF document so I selected this
particular document which has all
typical components of PDF I have text I
have vector graphic than I have images
in order to demonstrate that let me
create some PDF oh sorry
that's Rand filter and where I will put
all the settings for this particular
document so first thing which I would
like to do is perhaps to change the
appearance of the graphics what I will
do I will choose the blue tone abstract
profile which if I previewed it changed
quite a bit of the appearance of the
graphic component in this document now I
don't want to leave over the the images
which are really very vibrant in color
so what i will do i'll choose a little
bit different correction for the images
and in this case i'll use the sepia as
you see my original document changed
very dramatically from the original but
just by a few of mouse clicks so what I
see now that I haven't noticed before
that I have the little text in the
headline in the yellow color and since I
wanted to use as few colors as possible
I think I can take care of this text by
applying some other transform to text
and the rest of the text on this page is
black and white so I will use the gray
tone abstract profile and as you see now
i have only few colors on this stage and
indeed this is what I wanted to do to it
to this document so now I'm ready to
apply this filter and save it when I
take the last final look at my new
document i think that the images perhaps
a little bit too saturated so let me try
to change that a little bit and i'll go
and select the images one more time and
i'll use a custom transform and if I
lower the saturation the result is has
changed even more and this is the format
that i like to say and color sink
utility allows me to save it in many
different file formats i can save it
in most of the known bitmap formats but
also I can export it for example to
postscript so let me do that and now I
can save my document i started with by
applying all the filters that i showed
you but i can also just save this
document for some other situation when I
want to start with the original so
simply reserve and whoops didn't reserve
not quite because the topic is still do
it on I'm sorry I must have oh no I see
what's happening i was applying this
filter all time ok so this document came
to this original form and now if i go
and look for my new document in the
postcode format and I open it with
colors link utility you can compare the
results of applying a filter and
changing quite dramatically the
appearance of it looks like my demo
didn't I forgot about one says that I
should have saved the last adjustment of
the images but you have an idea what can
be done with filters and this concludes
my talk on color sink and court so thank
you for a much for attention and it's
all yours
majolica so as you know Luke was showing
color sync utility and showing a new
filters capability of colors ink utility
we have some other changes in there as
well so I'd like to use this opportunity
to speak about them first of all colors
ink utility is now the new home for the
color stink preferences we've added the
filters support which luke just
demonstrated we have some administration
features which allows an administrator
user user to specify the profiles that
can be used by default by other users on
the same machine also we have profile
first aid and some new 3d view options
let me just take this opportunity to
demonstrate these real quickly so we can
go over to demo machine number two
please so I'm just going to launch in
the new color sync utility on pants
there homie hiatus and as you can see we
now the coloring preferences are now
here they used to be in the system
preferences and now they're here so
colors York utility more than ever is
now the one-stop shopping for all color
stink related settings one thing to be
aware of this is for example a lot of
applications like to be able to provide
a button in their UI to send users to
the color sync preferences this is
accomplished in the past via an API CM
launch color sync references this API
will still work on Panther instead of
launching system preferences it will now
launch color sync utility one of the
other features that we've always
evangelized is coloring profile first
aid I always like to mention this
because it's a great utility that
developers should run on any profiles
they ship with their applications or
that their applications create to make
sure that they are valid icc profile
similarly if you ever come across any
bad profiles that are not correctly
flagged by coloring profile first aid
feel free to send them to us and we'll
add more tests in the future the last
thing I wanted to show in colors colors
ink utility is some new things we've
added to the profile viewer this is some
fun stuff that we've added to make
viewing of profiles more interesting so
as before we're using OpenGL in order to
take all the contents of an icc profile
and show it in three dimension
so we can look at it and spin her around
zoom in zoom out what we've added now is
a new contextual menu on this so that
you can add more options for example
instead of just showing it in la vie
space you can see it in la lu v space if
that's your favorite space or you can
see it in XY z yxy space which is kind
of neat usually people see XY plots from
above it's always trying to neat to see
it from the sides to one of the other
features we added was let me go back to
La Vie space is the ability this has
been often requested the ability to
compare the gamut of 2 profiles we've
accomplished that in a very simple
elegant way what we do now is we have a
contextual menu that allows us to hold a
profile for comparison so let's say I
want to take this generic RGB profile
and compare it against the other
profiles that are installed in the
system all idea all i do is command
click select hold for comparison and you
can see it kind of changes slightly what
that is is an indication that now as I
switch to other profiles we can see how
the generic RGB profile compares to it
so for example I can go to the display
profile and see the two of them next to
each other let me zoom it in a bit and
you can see the overlap between the two
color spaces so here you can see all of
our website profiles as points and how
they compare to the outline of the other
profile to see that the sepia talent
profile which is kind of cool to look at
in 3d so that's that's one of the key
features that we've added let me go back
to my slides
so it's interesting that the last thing
I was showing was color sync using
OpenGL to show profile well there's
another way that you can integrate color
sneak and OpenGL together and that is to
be able to do real-time color correction
and image and enhancement of video
real-time and this is something we
showed for the first time last year at
WWDC I want to refresh what we spoke
about then and also tell you about some
of new api's we've added to color sync
to make it easier for you to do that and
do this in your own applications so for
a bit of review the basic idea is to be
able to provide real-time color
correction of video which has been a
something in the past that's only been
able to be accomplished on very high-end
hardware and now we can do that today on
desktop machines because we have very
advanced hardware available on video
cards modern video card some of them
have support for per pixel 3d texture
look up and these are available on
nvidia geforce TI cards and also an ati
radeon 9000 series cards and by loading
into these tables color correction
transformations we can actually
accomplish real-time color correction
the great thing about this is it
actually is a great story because it
shows the integration between all the
graphics technologies available on Mac
OS 10 because what we're doing is we're
combining the advantages and powers of
color sync opengl courts and quicktime
all in one example the basic premise is
that we want to be able to play
QuickTime content onto a quartz OpenGL
surface and attached to that surface
will be a 3d texture that has been built
from a color stink color world reference
in order to make this easier for your
applications to achieve this we've added
some new API to color sync the first is
a new API called CM make profile and
this API is useful for in several ways
first of all you can use it to create
abstract profiles which can be used for
doing Huell rotation or contrasts or
other things like sepia tone you can
also be used to make standard RGB
profile such as profiles for ntsc
standards and other standard color
spaces so it's a general-purpose
function for creating profiles given a
CF dictionary of attributes it's a very
simple function to use I'll show it a
little bit later and one
example the other function we've
provided is an API called CW fill lookup
table and what this function does is
takes the color same color world
reference and fills in a table that is
suitable for being loaded up to a video
card so let me give an example of using
our cm make profile API again as I
mentioned before the way to CM make
profile API works is you pass in a
profile to modify and a dictionary of
attributes that will tell you tell
colors think how to modify and create
that profile in this case we want to
create an abstract profile that will
rotate all the colors in a color space
by specific you angle so this function
here that I've outlined passing a
profile and you pass in a float which is
the angle of rotation so what I want to
do is build up a dictionary with key
value pairs the first key value pair is
going to be the key proc which is a
callback rock and then I need to give as
the value a call to the address of the
function which in this case is the
function my lab to lab proc well CF
doesn't have core foundation does not
have a way to pass and address as a CF
type so what we do instead is we take
that address and coerce it to an essence
64 and then create a CF integer number
for that integer and put that in the
dictionary the reason why we use in in
64 is so that way the same code will
work unaltered under 64-bit addressing
in the future similarly the other thing
we need to add to the dictionary is a
wreck on where we could provide a
pointer to a structure of interesting
parameters in this case the parameters
not very interesting it's just the
address of a float value for the angle
to rotate but the idea is the same we
take the address of the angle we coerce
it to a 64-bit integer and add that to
the dictionary with the key rack on once
we've created a dictionary we call cmake
profile and that does all the work what
that API then does is it unpacks the
dictionary gets the ref khan and the
callback croc out of it and call that
proc repeatedly for all the possible
values in order to build the abstract
profile this is a very very easy way to
create an abstract profile and once
you're done is the function does a
little cleanup but perhaps what would be
slightly interesting to look at is what
our labs
lab proc looks like this is a very
simple callback proc what it takes as
parameters are pointers to l.a and b
values and a restaurant of course the
the functions responsibility is to take
those values look at the initial values
and alter them and return the new values
and that value will be used in the
profile this function is very simple all
it does is take the initial labr the
initial ad coordinates and rotates them
by by the angle provided the other code
snippet I wanted to show was this is an
example of using a new CW Phil look up
texture API again this function i'm
describing here is a function that will
make a 3d texture given three profiles a
source profile an abstract profile for
example one that we created using the
hubert a shin code earlier and a
destination profile in order to do that
first of all we need to create a color
world i haven't shown that here there's
other examples for how to create color
worlds but i've just in place of that
put in a function to create a color
world once you have a color world we
need to call the CW still look up
texture call twice the first time we
call it we're all we need to do is
determine the size of the data that it's
going to require given the number of
grid points that we desire once we get
back to size we allocate the memory of
that size and then call color sync CW
Phil look up texture to populate that
table with the appropriate values then
there's existing code snippets which we
will provide in order to show you how to
apply that texture to an opengl surface
but it's fairly trivial so all that's
good to see on the screen but perhaps
the best thing to do is to let your
appetite and show you a brief example of
how this works in a real live demo so if
i go back to demo to please so what I
have here is an example called color an
example application called color world
excuse the pun and what I can do with
this in addition to opening images is
open up movies Dukey
and then what i can do is i can bring up
in a little inspector window which
allows me to show what profiles i'm
going to be applying to that window i
have 4 profiles to choose from i can
specify source destination a abstract
and proofing profile today i'm just
going to show you a little bit about the
source and destination if I know that
this profile would be more appropriate
for an srgb profile for this movie I can
just change the source profile and we
can already see the difference between
the left half and the right half but
this is not really all that interesting
let's start playing the movie and start
putting an abstract profile in between
and what you can see already is that we
can start rotating the hue and we're all
doing this real-time or are we going to
adjust the saturation down so let's say
we want to bring the saturation down or
bring it up but so as you know this is
the trailer for finding nemo and what i
want to use is I want to use this
application as an example for how to
make it easier to find Nemo so what what
we're going to do is I'm going to
desaturate this image way down but then
what I'm going to do is I'm going to
limit it to only desaturate the colors
that aren't email so let's see if I can
get these colors right I've got it
backwards so now you can see everything
in the image is very desaturated but
Nemo still looks nice and bright so now
I can go and I could have been doing
this live I suppose but it's hard when
he's moving so now i have an example of
the application showing real time color
correction a video content doing
selectively very complex abstract
profile generation and it's all very
responsive we can change Nemo to you as
well I can go back and just
so that gives you an idea so hopefully
this inspires you guys to add 3d
hardware texture support to support
color management in your application so
back to slides please so one of the next
things I'd like to talk about is display
calibration one of the features that
color sink is provided in the past on
Mac OS 10 is the ability for the users
not only to have automatic profiles
generated for the displays but also for
users to calibrate their own displays in
an easy to use fashion this was achieved
by users going to the display
preferences and the system preferences
UI and clicking on the calibrate button
in the past that calibrate button would
simply launch the Apple calibrator
third-party calibrators were supported
obviously but they were not integrated
into the system in the same session what
I'd like to talk about today is adding
support for third bowery third-party
calibrators into this architecture this
is very very simple to do you all you do
is you build your carbon or cocoa
calibrator application the same way you
have before you just need to make a few
small changes one is there is a key you
can add to your info.plist this key is
the cs display calibrator key and that
tells color think that your application
is in fact the display calibrator second
the there is a new optional parameter
that or property that's associated with
the open application that your
application will receive this
application will be sent or this this
property will be sent to tell your
application what displayed to be
calibrated third you need to install
your calibrator or assembling to your
calibrator in a standard location so
that we can find it that location is
library color sync calibrators and again
just to get you started on this we have
an example calibrator that's installed
in the system that's very easy to use as
a starting point let me give a quick
demo of this to show you what we're
talking about back to demo two please so
first of all let me go and show you on
the system that if you go into Panther
developer examples
color sync we have a new project in here
called demo calibrator and we have all
the sources in here and it's a good
example for how to do assistant type UI
and cocoa and it has all the all the
basic stuff you need to do in order to
support the property list entry and the
info.plist entry and the custom apple
event correctly we already have the
calibrator already pre-built and what
I've done is I've instead of to get
things set up as I've actually installed
a symlink to that calibrator in system
library color sync calibrators so this
would be what your app calibration apple
didn't want to do as well what that now
means is if we go to the system
preference and click on the displays
color settings I mean if we now click on
the calibrate button there's a new
dialog that appears that allows you to
the user to choose which of the
installed calibrators to be used so just
to complete the example I can click on
the demo calibrator click calibrate and
it will launch it and you can see what
this demo calibrator is all about it's
actually a very simple calibrator all it
does is take the profile that was all
ready for the display and ask the user
to rename it and saves it as a new
profile so not much of a calibration but
at a good starting point for your app so
let me let me go back and quit since I'm
here I'd also like to take the
opportunity to show some new features we
have in our calibrator because we've
made some important enhancements there
that I think you'd like to see so if we
go and calibrate this calibrator it
looks very similar at the start I might
be able to tell it's built in cocoa now
but if we wear the changes really show
up as if we turn on expert mode because
now in addition to instead of showing
the three apples the red green blue
apple side-by-side we now have finer
more advanced controls what we have is
the ability to show a single patch and
the ability to adjust the brightness in
the tint of those separately which
allows for much better control main
reason for this is it's very hard for
users to adjust the blue gamma because
the blue is so much less visible to the
human eye so this is a bit of audience
participation time so if you guys can
tell me if that looks good or I think
that looks pretty good to me so far
and then we can adjust the tint around
to make sure it looks neutral what do
you guys think that look good maybe a
bit there so that was the first change
we made but then in addition we now
allow for multiple steps instead of just
adjusting the mid-tones we can now
adjust the highlights the shadows in the
dark shadows so you can get a really
good calibration on LCD displays which
have very complex gamma curves so you
can go through here and step through
this calibration process and i'm
actually i'm wrong i should be
calibrating the big screen not the small
screen anyhow you got the idea was good
one of the other new advanced features
is we now also allow for the profile to
be used by other users on the same
machine so is that an admin user you can
say a lot users to use this calibration
and then we can save it all done so
that's the new calibrator architecture
for third-party calibrators in a peek at
our newest calibrator so back to slides
so as i said i was saving something
called shifts for last and what a sips
mean well actually the name is probably
going to change so but for now what's it
stands for is scriptable image
processing system and what i want to
talk about today is why we're doing
something called ships and what its
features are how its architected and how
you can use it so what we notice is that
we needed a common place to go to do
perform common operations on image files
in a scriptable manner this was
evidenced by the fact that today we had
kind of a mixed story for example we had
color sink scripting which could do a
lot of great color sync operations on
images but it could not rotate or scale
or convert images between file formats
we had image capture scripting which
could rotate and scale but it couldn't
do color matching or convert between
formats then we had the preview
application which could do everything
you could do rotation and conversion but
it wasn't scriptable so all this was
saying to us that we needed to have a
single central place that would
provide a tool for scripters or batch
processing in order to do common
operations on images so what are the
features that we're going after in the
first release well one of the features
is going to be a good name that will
come later the other name the other
features will be we want to be able to
read and write between common image file
format jpg various variations of JPEG
TIFF Jess and ping we also wanted to
support basic image operations such as
rotate and flip and crop and of course
since this is a color sync discussion
today we want to support proper color
management operation embedding profiles
extracting profiles and matching between
color spaces we want to be able to
support between common metadata tags and
support reading and writing of those and
also we wanted to as a general rule we
wanted to presume preserve the fidelity
and content of the regional document as
much as possible of course this is just
the beginning for this tool there's lots
of places where we can go with it in the
future in the subsequent releases we're
considering the future adding support
for more complex file formats like
multi-layer multi-page formats and other
more advanced image operations such as
blur or sharpen or enhance also the list
of metadata tags that people are using
is an always increasing number so we'd
like to support mode more of those in
the future as well here's the basic
architecture that we're working on
currently it's implemented as a simple
compiled tool that's installed in user
bin it's called user bin tips for now
and this is a tool that links against
core graphics QuickTime and color can
sync it links against core graphics for
high quality rotation and scaling the
links against quicktime for a wide
variety of image file importing and
exporting and it links against color
sync for the best quality color
management it can operate on one file or
multiple files at a time it can be used
to both query or modify images or
profiles queries can either return
properties as simple text or can also
return it in XML format for Special
Operations the actions can be used to
modify profiles or images in place or
can also be used to modify them to an
output directory so
next question is well how can you use
this well it's a simple command-line
tool so there's lots of ways to use this
for example you can just go into
terminal and use it however it's also
going to be usable from applescript we
won't be showing that today but there's
going to be an apple ship applescript
veneer on top of sips which will create
an applescript dictionary which will be
very easy to use and you expose all this
functionality also it'll be available
for other scripting languages any
scripting language that can support
command line tools and of course it's
also possible for you to call this tool
from your own app by using standard
either CF or NS at app kit or or
pathak's calls to launch executables so
let me give you a demonstration of this
ok so I'm going to start out in terminal
and what I want to do first is just
going to type dash help just to give an
idea of what we have eventually we need
to have a man page but for now this is a
good start as you can see you can call
it to basically do get properties or set
properties and in addition on images
there are several other actions that can
be performed such as embedding profiles
rotating flipping cropping you know you
name it so let's say let's see that's
try to think of some things we want to
do here let me i'm currently in a
directory that has a bunch of images in
LS let's say I want to see all the
information about this image Big Bend so
I can do sips dash get property all on
big bend it quickly returns all the
information it was able to obtain so the
height and width of the image the DPI
the image the model of the camera that
it was produced on here's another type
of query I can do let's say I want to do
is see which of all these images have
profiles in them so i can just do snips
dash yet property profile on star
and this will show me the list of all
the images that are in this directory
some of them have profiles some of them
don't but it gives you a good idea of
the kind of the way that you would use
sips and actual usage well let's go and
look at this directory and i'll see if i
can come up with another example of how
to use this tool so let me go to my
photos directory and you it in my cons
and i got a bunch of images here and
coincidentally one of them is upside
down gasp so what I would like to do is
use tips to fix that so what I'm going
to do is I'm going to do to see which
photo is it it's me this picture so I'm
going to do sips dash rotate 180 and I'm
going to pass in ok and I'm going to
make a copy of it and i'll call it dash
out too
typo
and we're done so now if I go back to
this directory in the finder will update
and we have the new image which has been
rotated so those are just some very
simple operations and it's quite handy
however there's some more advanced
things you could do as well let me go
back and view this in column mode as you
see we have a bunch of folder a bunch of
images in this directory and what I'd
like to do is to build a web page that
contains thumbnails of all these images
along with the information about these
images so what I've done is I've created
a simple script in this case in this
example using Python you could done this
in any number of scripts either shell
scripting or eventually we'll be able to
do this in applescript as well but all
this is is a simple you know slightly
more than one screen of text that will
take a parameter from the input assume
it's a directory and take all the images
in that directory create thumbnails
creating thumbnails is interesting does
that involve several operations it
involves scaling the image down to a
reasonable size and in this case
converting them all to JPEGs and
converting them all to standard color
space in this case srgb once it's done
all crated all the thumbnails it will
then query each image we actually start
this going and produce a web page from
it so I called this script build info
build image info web page and I'll pass
in volumes three so it goes so again as
I said before it's going to build
thumbnails for all these images and some
of these images are pretty big so it
takes a bit and then once it's done
creating the thumbnails it's going to
take each of those images and query them
and return information about them so
hopefully you can read this well enough
but this is the webpage that it created
and opened and you can see all the
photos along with all the information
about them including what camera it was
created with what the amended profile is
when the creation date is hopefully that
will inspire you to create all sorts of
other tools based on this foundation
technology so that's our discussion for
the day I think we have a really good
story I think now more than ever we have
a story where we're continuing to add
new high-level functionality to color
color sync as well as increase the
integration with the rest of the system
so that you get correct behavior by
default so I think if you had any other
words to wrap up that would be great
you