Well, at the command line:
There’s tificc from LCMS. This can handle 8- and 16-bit integer and also 32-bit floating point tiffs, and also V2 and V4 profiles. To see the available options, just type “tificc”. It’s easier to use if you put the source and destination profiles in the same folder as the image file (makes typing the paths to the profiles easier).
The basic usage is:
tificc list-of-conversion-options-to-use -i input-profile.icc -o output-profile.icc input-image.tif output-image.tif
So if:
- you want to use relative colorimetric intent (-t1)
- you want to use black point compensation (-b)
- you want 16-bit integer output (-w16)
- you want to embed the printer profile in the converted image (-e)
- the input image profile is “ClayRGB-elle-V2-g22.icc” (-i)
- the output image profile is “DC-Colour-labs-Frontier-Glossy.icc” (-o)
- the input image is “two-apples.tif”
- the output image is “two-apples-frontier-glossy-using-tificc.tif”
Then here is the tificc command:
tificc -t1 -b -w16 -e -i ClayRGB-elle-V4-g22.icc -o DC-Colour-labs-Frontier-Glossy.icc two-apples.tif two-apples-frontier-glossy-using-tificc.tif
LCMS also provides a jpeg version of tificc, but I forget what it’s called.
Also there are “-c” switches that govern the quality of the output. These switches used to be important, but right now I’d have to do some experimenting to confirm. On the LCMS mailing list Marti made a comment that indicated that the switches shouldn’t be used, but the context was matrix profile conversions and the comment possibly doesn’t apply in the latest version of tificc (I’m using LCMS 2.8).
So if you want to experiment, for maximum quality add “-c0” somewhere in the list of conversion options (the exact order doesn’t matter for any of the options, except the input and output tiffs must be at the end). The other options are “-c1”, “-c2”, and “-c3”. I don’t remember what the default is, but it’s not “-c0”.
Here is a sample ImageMagick command:
convert two-apples.tif -profile ClayRGB-elle-V4-g22.icc -profile DC-Colour-labs-Frontier-Glossy.icc two-apples-frontier-glossy-using-im.tif
Does anyone know of any additional options for using IM to convert from one ICC profile to another?
There was a time when IM was hard-coded to use one of the “less precise” -C# options provided by LCMS (confirmed by checking the source code), but I don’t know if that is still the case. Presumably there are switches to use or not use black point compensation and to specify the conversion intent, but I don’t use IM for converting images from one ICC profile to another (I do sometimes use IM, but not for this).
Here is a sample ArgyllCMS cctiff command (cctiff):
cctiff -v -ir -p -k ClayRGB-elle-V2-g22.icc -ir DC-Colour-labs-Frontier-Glossy.icc -e DC-Colour-labs-Frontier-Glossy.icc two-apples.tif two-apples-frontier-glossy-cctiff.tif
Here is what the cctiff options mean:
-v Be verbose (spit out a lot of information about the profiles and such)
-ir (must be repeated for each profile) Use relative colorimetric intent. See the documentation for specifying a different intent
-p Use slow accurate conversion routines
-k Calculate the difference in accuracy between using the slow accurate routines vs using the default routines
“-e DC-Colour-labs-Frontier-Glossy.icc” Do embed the final profile (or other profile of your choice) in the output image (by default no profile is embedded in the output image)
A couple of years ago I did some rather extensive comparisons of the accuracy of ICC profile conversions using round-trip convesions of 16-bit integer images - that in theory should be completely lossless conversions because both profiles had color gamuts that completely encompassed all the image colors - and cctiff provided the most accuracy.
cctiff requires V2 profiles and can work with jpegs and tiffs, including 16-bit integer tiffs, but afaik it doesn’t work with floating point tiffs.
cctiff can be used to chain together a sequence of conversions.