One of the issues that I ran into early while testing Cruncher was the need to run custom ICC profile conversions. This is not as common of a requirement as some others, but it is beneficial to document this aspect of the application.

How ICC profile conversion works

ICC Profile conversion is done by specifying an input ICC profile and both an output ICC profile and color output format.

By default, Cruncher checks each JPEG to see if it has an ICC profile embedded in the image. If it does, Cruncher will use that ICC profile for any color manipulation. However, JEPGs can be created with an ICC profile that is not embedded in the image. If that is the case it is up to each JPEG decoder to provide an ICC profile. This does not always produce great results.

How to configure ICC profile conversion

The configuration is pretty straight forward. You will need to create an icc_conversions object in your JSON config file.

Each icc_conversion conversion profile is identified by its name. In this example, the name is adobe. To apply this conversion to a version you set the version icc_conversion to the name of the icc_conversions profile you want to use.

{
    "directory": "C:\\Path to images\\backgrounds",
    "output": "C:\\Path to images\\backgrounds\\crunched",
    "recursive": true,
    "icc_conversions": {
        "adobe": {
            "input_icc": "C:\\Windows\\System32\\spool\\drivers\\color\\USWebCoatedSWOP.icc",
            "output_icc": "C:\\Windows\\System32\\spool\\drivers\\color\\sRGB Color Space Profile.icm",
            "mode": "RGB"
        }
    },
    "versions": [
        {
            "comment": "Background image compression for web page with custom ICC profile conversion",
            "file_format": "JPEG",
            "quality": 70,
            "width": 1920,
            "height": 1080,
            "append": "-bg",
            "keep_metadata": false,
            "icc_conversion": "adobe"
        }
    ]
}

You can create multiple ICC conversions in a single config file.

each icc_conversions object has three attributes:

input_icc This is the path to the input ICC profile.

output_icc This is the path to the output ICC profile.

mode This is the color format of the output ICC profile.

Note: ICC conversions greatly increase the computation required to compress images. Only use an ICC profile conversion if you need to do so to retain proper image chrominance.