<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><br class="Apple-interchange-newline"></span></span></span></span></span></span></span></span>
</div>
<br><div><div>On Feb 7, 2011, at 6:15 AM, Jan-Peter Homann wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<div bgcolor="#ffffff" text="#000000">cupsICCProfile<br>
***************<br>
<a class="moz-txt-link-freetext" href="http://www.cups.org/documentation.php/doc-1.4/spec-ppd.html#cupsICCProfile">http://www.cups.org/documentation.php/doc-1.4/spec-ppd.html#cupsICCProfile</a><br>
<br>
Comment Jan-Peter Homann:<br>
This PPD attribute delivers a possibility in the printing GUI to
specify an ICC profile for the driver setup by keywords like e.g.
ColorModel.MediaType.Resolution/Description<br>
<br>
As CUPS is not able to perform ICC based transformations itself,
this functionality is helpful for an external filter to identify the
correct printer ICC-profile for the choosen driver setting<br></div></blockquote><div><br></div><div><br></div><br><blockquote type="cite"><div bgcolor="#ffffff" text="#000000">
<br>
cupsRenderingIntent<br>
*********************<br>
<a class="moz-txt-link-freetext" href="http://www.cups.org/documentation.php/doc-1.4/spec-raster.html#TABLE2">http://www.cups.org/documentation.php/doc-1.4/spec-raster.html#TABLE2</a><br>
<br>
Comment by Jan-Peter Homann:<br>
Extremly poorly documented feature. It may allow to specify a
RenderingIntent for an ICC based color conversion from the document
colorspace to cupsICCProfile. (Or it is may means something complete
different...)<br>
<br>
Implementing Color Management<br>
*********************************<br>
<a class="moz-txt-link-freetext" href="http://www.cups.org/documentation.php/doc-1.4/raster-driver.html#COLOR">http://www.cups.org/documentation.php/doc-1.4/raster-driver.html#COLOR</a><br>
<br>
Comment by Jan-Peter Homann:<br>
This text describes NOT how to implement Color management with CUPS.
It only describes the part of specifying a selector to printer
profiles with cupsICCProfile.<br>
<br>
<br>
Conclusion<br>
***********<br>
So far as I understand, the main idea of color management in CUPS is
framework for PPD-options to select printer profiles in the
directory <var>/usr/share/cups/profiles. <br>
</var>If the CUPS profile selector should be linked with settings of
the printer driver (e.g. Gutenprint) it is the responsibilty of the
driver vendor to create the link.<br>
cupsICC also allows to define individual Keywords through <tt>cupsICCQualifier2
and </tt><tt>cupsICCQualifier3 </tt><br>
to be defined in the PPD.<br>
This could e.g.<br>
"mediatype"<br>
"NameOfDriverSetting"<br>
If the special settings are specified in the driver, this allows to
organize the driver settings according mediatypes. <br>
<br>
CUPS delivers only a mapping of Printing-Device/Setting to
ICC-profiles. <br></div></blockquote><div><br></div><div>Yes, that is the job of *cupsICCProfile. It allows a print dialog to cross reference settings with an ICC profile, which is then returned back to the application (or whatever) writes out the PDF. The profile is then placed in the PDF print spool file as the OutputIntent, if you are using ColorSync Color Matching, or if you're using application color matching (but not if you're using the 3rd option which is vendor color matching, which is a proprietary option).</div><div><br></div><div>CUPS itself is just a manager of data. It does no conversion. Once the PDF spool file is written, CUPS facilitates the sequential processing of the spool file to get it to its intended destination in a form that the printer can consume. So again CUPS is just a manager. On OS X, generically for a desktop inkjet printer: it will hand the PDF onto a system defined rasterizer, which in this case is cgpdftoraster filter. That binary code basically calls in Core Graphics and ColorSync to do color management and rasterization. CUPS then hands the raster file off (per the PPD requesting this) onto rastertoescp filter, which converts the raster into ESC/P commands.</div><div><br></div><div>A gutenprint driver on Mac OS X also leverages cgpdftoraster but then uses different filters, obviously, than Epson's, the rest of the way.</div><div><br></div><div><br></div><div><br></div><br><blockquote type="cite"><div bgcolor="#ffffff" text="#000000">
If such mappings are managed outside CUPS e.g. via Oyranos or Gnome
Color Manager, it is not a must for ICC aware print workflow usind
CUPS as transport mechanism.<br>
For the enduser, the presentation of different printer driver
settings from e.g. Gutenprint in the Printing UI could be realized
without CUPS through the LINUX OpenPrinting Dialogue as an
individual option.<br></div></blockquote><div><br></div><div>Ask who is going to build the drivers before something else gets implemented. Gutenprint does leverage *cupsICCProfile, although just as defaults for grayscale, RGB and CMYK. </div><div><br></div><div>If the drivers are never going to automatically help the user pick a profile for a print condition, and there won't be some canned profiles for these conditions, then further use of *cupsICCProfile is indeed pointless.</div><div><br></div><div>In any event, manual selection of an ICC profile (a custom one presumably) is something that's outside of the PPD, supplied in the print dialog by whatever generates that dialog (application? standard system dialog?) and that needs to be captured so the profile is included in the PDF print spool file. </div><div><br></div><div>The conversion using that profile happens downstream by Ghostscript along with rasterization. Then CUPS moves the color managed raster file along to another filter for either display (maybe using a tiff filter) or to the printer.</div><div><br></div><div><br></div><div><br></div></div><div>Chris Murphy</div></body></html>