[Openicc] Is CUPS the right place for printer color management...

Chris Murphy lists at colorremedies.com
Mon Feb 7 13:00:32 PST 2011



On Feb 7, 2011, at 6:15 AM, Jan-Peter Homann wrote:

> cupsICCProfile
> ***************
> http://www.cups.org/documentation.php/doc-1.4/spec-ppd.html#cupsICCProfile
> 
> Comment Jan-Peter Homann:
> 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
> 
> 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



> 
> cupsRenderingIntent
> *********************
> http://www.cups.org/documentation.php/doc-1.4/spec-raster.html#TABLE2
> 
> Comment by Jan-Peter Homann:
> 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...)
> 
> Implementing Color Management
> *********************************
> http://www.cups.org/documentation.php/doc-1.4/raster-driver.html#COLOR
> 
> Comment by Jan-Peter Homann:
> 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.
> 
> 
> Conclusion
> ***********
> 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 /usr/share/cups/profiles. 
> 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.
> cupsICC also allows to define individual Keywords through cupsICCQualifier2 and cupsICCQualifier3 
> to be defined in the PPD.
> This could e.g.
> "mediatype"
> "NameOfDriverSetting"
> If the special settings are specified in the driver, this allows to organize the driver settings according mediatypes. 
> 
> CUPS delivers only a mapping of Printing-Device/Setting to ICC-profiles. 

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).

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.

A gutenprint driver on Mac OS X also leverages cgpdftoraster but then uses different filters, obviously, than Epson's, the rest of the way.




> 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.
> 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.

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. 

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.

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. 

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.



Chris Murphy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/openicc/attachments/20110207/3085a19f/attachment.htm>


More information about the openicc mailing list