The setreproduction operator
This page applies to Harlequin v14.0r0 and later; both Harlequin Core and Harlequin MultiRIP
dict setreproduction -
This operator configures the color management for converting device independent colors to the output device. This operator is subject to gsave and grestore semantics of the PostScript language.
Note: To make use of the setreproduction extensions you must have Harlequin ColorPro installed and activated.
All keys in the operand dictionary are optional. Unspecified keys assume the default value. An empty dictionary will revert all values to their defaults.
In the simplest non-trivial use case, one ICC output profile can be configured which will be used for converting all device independent color to the output device. At the other extreme, it is possible to configure highly complex color pipelines. The /NextDevice configures a complete color transform, and any number of these may be chained together into a complex color pipeline.
The details for each key are described in the following sub-sections.
Profile in setreproduction
Value: file, object-based dictionary, or null
. Default: null
.
The default of null
results in device independent colors being rendered by the CRD from the graphics state. This is not normally recommended for color managed workflows, but may be useful for proofing. If the setreproduction dictionary also contains a /NextDevice
, the /NextDevice
dictionary must contain an InputColorSpace entry with a valid color space.
A file stream must contain an ICC profile which is used for rendering colors from the ICC PCS to the device space. The CRD from the graphics state will then be ignored.
The value may be an object-based dictionary (see Object-based color management), which allows the valid object type/color model combinations to be set independently. All keys are optional:
<<
/Default <icc-profile> or null
/Picture <color-model-dict>
/Text <color-model-dict>
/Shading <color-model-dict>
/Other <color-model-dict>
>>
where <color-model-dict> contains settings for object type/color model combinations. All keys are optional. Any unspecified keys assume the default:
<<
/Default <icc-profile> or null
/CMYK <icc-profile> or null
/RGB <icc-profile> or null
/Gray <icc-profile> or null
/NamedColor <icc-profile> or null
/CIE <icc-profile> or null
>>
When more than one profile is assigned in an object-based configuration, all the profiles must have the same device space.
It is possible to use ICC profiles in some object-based settings, whilst leaving other settings as null
. This is not normally recommended. If the setreproduction
dictionary also contains a /NextDevice
, the /NextDevice
dictionary must contain an InputColorSpace
entry with a valid color space for all the object-based settings with a null
Profile.
IntentMappings in setreproduction
Value: name, object-based dictionary, or null
. Default:
<<
/Perceptual /Perceptual
/RelativeColorimetric /RelativeColorimetric
/Saturation /Saturation
/AbsoluteColorimetric /AbsoluteColorimetric
/Picture null
/Text null
/Shading null
/Other null
>>
This key modifies the behavior of setrenderingintent
(see The setrenderingintent operator), and other methods of setting the rendering intent that exist in other PDLs and image formats. The default value honors the rendering intents as supplied by the job. With this default, each of the four ICC rendering intents is used directly by the job using the appropriate tables from the output profile.
It is also possible to override this behavior by overriding:
- each of the four ICC intents with a different intent,
- the rendering intent for all objects, or
- using object-based rendering intents for specific object type and color space combinations.
A name value must be one of the four ICC rendering intents. It will be used in all color conversions. Any rendering intent set within the job will be ignored. This is an example that forces all objects to use the /Perceptual
intent:
/IntentMappings /Perceptual
A dictionary operand accepts the following keys. All keys are optional:
/Perceptual <name>
/RelativeColorimetric <name>
/Saturation <name>
/AbsoluteColorimetric <name>
/Picture <color-model-dict>
/Text <color-model-dict>
/Shading <color-model-dict>
/Other <color-model-dict>
The four keys /Perceptual, /RelativeColorimetric, /Saturation, and /AbsoluteColorimetric, are used to replace an explicit rendering intent. The replacement intent must be one of the four ICC intents, or /AbsolutePerceptual or /AbsoluteSaturation. The latter two intents are Harlequin extensions that use the same tables as standard /Perceptual and /Saturation, but with the absolute white point mapping as used for /AbsoluteColorimetric. Note: these keys replace the use of the /Default key that is used in other object-based dictionaries in color operators.
The <color-model-dict> must be a dictionary, (see Object-based color management ), which allows the valid object type/color model combinations to be set independently. All keys are optional. Any unspecified keys assume the default value:
<<
/Default <name> or null
/CMYK <name> or null
/RGB <name> or null
/Gray <name> or null
/NamedColor <name> or null
/CIE <name> or null
>>
BlackPointCompensation in setreproduction
Value: boolean or object-based dictionary. Default: false
.
This value enables or disables black point compensation as defined in [BPC]. The feature is described in detail in Black point compensation . The default value is false
which disables BPC. A value of true
enables BPC.
BPC support has been extended to allow BPC based on object type and color model. It follows a similar pattern to Profile in setreproduction .
The value may be an object-based dict (see Object-based color management ), which allows the valid object type/color model combinations to be set independently. All keys are optional:
<<
/Default <boolean> or <color-model-dict>
/Picture <boolean> or <color-model-dict>
/Text <boolean> or <color-model-dict>
/Shading <boolean> or <color-model-dict>
/Other <boolean> or <color-model-dict>
>>
where <color-model-dict> contains values for object type/color model combinations. All keys are optional. Any unspecified keys assume the default value:
<<
/Default <boolean>
/CMYK <boolean>
/RGB <boolean>
/Gray <boolean>
/NamedColor <boolean>
/CIE <boolean>
>>
Note: Object-based BPC is not exposed in HMR UI; OEMs can still access it through their own configurations.
SourceIntent in setreproduction
Value: name or null
. Default: null
.
This setting is rarely used.
The standard ICC workflow contains a source and destination profile, and uses a rendering intent to select the appropriate table from both profiles. In some workflows, it may be desirable to use different intents from the source and destination profiles, for example some of those described in an ICC white paper [WP9].
If the value is a name of one of the four ICC rendering intents, this is used to select the appropriate table from the source profile. The destination profile will continue to use the intent set by the job as modified by IntentMappings.
The default value of null uses the same rendering intent for both the source and destination profiles.
NextDevice in setreproduction
Value: reproduction-dict, or null
. Default: null
.
This key configures a color transform using a reproduction-dict that accepts the same keys as setreproduction itself. /NextDevices
can be nested; any number of /NextDevice
transforms may be configured, with color transforms linked to each other in a chain to potentially form complex color pipelines. One simple use of /NextDevice
is for emulation of a press on a proofing device, (see Simple interception of device color spaces ).
The default value is null, which indicates the last transform in a chain of reproduction dictionaries. The color transform configured by /NextDevice
depends on whether the InputColorSpace is:
- a device link ICCBased space, this is used as the transform;
- or a device space, color values will be passed through;
- or a CalRGB, CalGray, or a non-device link ICCBased space. The transform will be between this space and the Profile in the current reproduction-dict;
- or null, the default case. The transform will be between the Profile from the previous transform and the Profile in the current reproduction-dict.
There is a restriction on the components that are allowed to be used in each color transform within the pipeline. The input components of a transform must be a non-strict superset of the output components of the previous transform. The input components of a transform are those in,
- the InputColorSpace entry, if present, or
- the Profile entry of the previous transform.
The output components of a transform are derived from,
- an InputColorSpace entry if present and its output is a device space, or
- the Profile entry.
Colors from the job are normally processed by all transforms in the chain of /NextDevice transforms. There are some exceptions to this rule:
- If the original color in the job was a device space and the intercept color space configured in setinterceptcolorspace is a device dependent space, for example, a device link ICC profile. The color will only be transformed by the /NextDevice transform if the input components of the first /NextDevice transform includes all the output components of the intercept space. If they do not, this is not an error, but the /NextDevice transforms will not be invoked, and the color will pass directly from the intercept space to the output. In this contrived example:
<<
/DeviceRGB [ /ICCBased (iccprofiles/sRGB-CMYKOG.icc) (r) file ]
>> setinterceptcolorspace
<<
/Profile (iccprofiles/SWOP.icc) (r) file
/NextDevice <<
/Profile (iccprofiles/CMYKOG.icc) (r) file
>>
>> setreproduction
RGB colors are transformed directly to CMYKOG via the device link intercept profile. Since the input components of the /NextDevice
are CMYK from SWOP.icc , and do not include the orange and green, the CMYKOG colors are sent directly to the output device.
All other colors in the job are converted to CMYK to match the input of the /NextDevice, and then processed by the /NextDevice
transform.
If a spot in the job matches one of the input components of a /NextDevice
, it bypasses intervening transforms and is sent to that /NextDevice
. This behavior is described in NextDevice named colorants.
Note: The use of /NextDevice
in conjunction with /DeviceN
intercept spaces is not supported. For information see Intercepting device spaces . Their use is not prohibited, but the /NextDevice
transform may or may not be applied depending on other factors in the configuration and the job.
InputColorSpace in setreproduction
Value: color space, object-based dictionary, or null
. Default: null
.
This key is only allowed within a reproduction-dict passed to a /NextDevice. It is not allowed in the top-level of the dictionary passed to setreproduction.
The default value is null, which means that the input tables from the Profile of the previous transform configured by setreproduction will be used to convert color to the PCS.
The valid color spaces allowed for InputColorSpace is this list, which is a subset of the PostScript language and PDF color spaces and Harlequin extensions:
- ICCBased
- CalRGB
- CalGray
- DeviceCMYK
- DeviceRGB
- DeviceGray
- CMM custom color space, Harlequin extension
Normally, a color conversion implied by a /NextDevice uses the input tables of the Profile from the previous transform, as described for the /NextDevice key. Instead, the InputColorSpace accepts the color values from the previous transform in the setreproduction chain and uses it in the current transform for the /NextDevice. The transforms are described in the /NextDevice section.
When using InputColorSpace, care must be taken to ensure that neighboring profiles in the overall sequence are compatible. The RIP will ensure that the colorant names are compatible, but it cannot ensure color compatibility.
The value may be an object-based dict, (see Alternate CMMs: CMM custom color spaces ), which allows the valid object type/color model combinations to be set independently. All keys are optional:
<<
/Default <color-space> or null
/Picture <color-model-dict>
/Text <color-model-dict>
/Shading <color-model-dict>
/Other <color-model-dict>
>>
where <color-model-dict> contains settings for object type/color model combinations. All keys are optional. Any unspecified keys assume the default value:
<<
/Default <color-space> or null
/CMYK <color-space> or null
/RGB <color-space> or null
/Gray <color-space> or null
/NamedColor <color-space> or null
/CIE <color-space> or null
>>
When more than one color space is assigned in an object-based configuration, all the color spaces must have the same input color model, but may have different additional spots within /DeviceN spaces. If the output of any of the color spaces is a device space, the same restriction applies to the output color model.
ID in setreproduction
Value: an integer, name, string, or null
. Default: null
.
This key is only allowed within a reproduction-dict passed to a /NextDevice. It is not allowed in the top-level of the dictionary passed to setreproduction.
The ID key is used solely to identify this NextDevice for the purpose of matching it with particular named color resources. See Named color database resources for a full description of how ID is used, and Illustrations of controlled merging of spots with color pipelines for illustrations of its effects.
CATMatrix in setreproduction
Value: /VonKries
, /Bradford
, /XYZScaling
, or array of nine numbers. Default: /VonKries
.
CATMatrix configures the chromatic adaption matrix (CAT) that is applied in a color transform using a CIE-based color space and a destination profile. The details are explained in Chromatic Adaptation Transform (CAT) .
NextDevice transforms inherit its CATMatrix from the previous NextDevice transform, or if the first, the parent reproduction dictionary.
The /VonKries
matrix is:
[0.40024, -0.22630, 0.0, 0.70760, 1.16532, 0.0, -0.08081, 0.04570, 0.91822]
The /Bradford
matrix is:
[0.8951, -0.7502, 0.0389, 0.2664, 1.7135, -0.0685, -0.1614, 0.0367, 1.0296]
The /XYZScaling
matrix is:
[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]